Tom小太子 发表于 2022-6-16 13:06:49

想请教一个R语言循环

我有一个单独循环(一下代码),现在我想把它整体重复1000次如何实现呢?

K<-10000
a<-1
r<-0.04
Bt<-c()
Nmin<-c()
Bt<-as.numeric(0.3*K)
Kill<-129
####先求t——t+1之间的N###

for (t in 1:100) {
    Bt<-Bt+r*Bt*(1-Bt/K)
    if(t%%4==0){
    set.seed(555)
    Nmean<-rnorm(1000,mean=Bt,sd=Bt*0.2)
    Nmean<-sample(Nmean, size=1, replace=FALSE)
    set.seed(777)
    Nmin<-rnorm(1000,mean=Nmean,sd=Nmean*0.2)
    PBR=min(Nmin)*0.1*1.04   
    set.seed(666)
    Kill<-rnorm(1000,mean=PBR,sd=PBR*0.2)
    Kill<-sample(Kill, size=1, replace=FALSE)
    Bt=Bt-Kill
    Kill<-Kill
    print(Bt)
    }
   else{
    Bt=Bt-Kill
    print(Bt)
}
}

plot(Bt)

####重复1000次####这个结果不太符合我的预期,想知道自己哪里出错了
K<-10000
r<-0.04
Bt<-c()
Nmin<-c()
Bt<-matrix(NA,101,1000)
Nmin<-c()
Nmean<-c()
Bt<-as.numeric(0.3*K)
Kill<-129
####先求t——t+1之间的N###
for (j in 1:1000) {
for (t in 1:100) {
    Bt<-Bt+r*Bt*(1-Bt/K)
    if(t%%4==0){
      Nmean<-rnorm(1000,mean=Bt,sd=Bt*0.5)
      Nmean<-sample(Nmean, size=1, replace=FALSE)
      Nmin<-rnorm(1000,mean=Nmean,sd=Nmean*0.5)
      PBR=min(Nmin)*0.1*1.04   
      Kill<-rnorm(1000,mean=PBR,sd=PBR*0.5)
      Killnew<-sample(Kill, size=1, replace=FALSE)
      Bt=Bt-Killnew
      Kill<-Killnew
    }
    else{
      Bt=Bt-Kill
      
    }
}
}
View(Bt)

临时号 发表于 2022-6-16 13:38:46

可以在外面再套一个for循环

傻眼貓咪 发表于 2022-6-16 14:17:05

可以在外面再套一个repeat循环

Tom小太子 发表于 2022-6-16 15:49:56

临时号 发表于 2022-6-16 13:38
可以在外面再套一个for循环

你好,下面重复1000次的就是用for循环,但是结果不太对

Tom小太子 发表于 2022-6-16 15:59:24

傻眼貓咪 发表于 2022-6-16 14:17
可以在外面再套一个repeat循环

你好Bt【t+1】是100个数字,怎样让他repeat的呀?转化成矩阵么

傻眼貓咪 发表于 2022-6-16 16:02:59

Tom小太子 发表于 2022-6-16 15:59
你好Bt【t+1】是100个数字,怎样让他repeat的呀?转化成矩阵么

请问你想实现什么?有题目吗?

Tom小太子 发表于 2022-6-16 16:21:44

傻眼貓咪 发表于 2022-6-16 14:17
可以在外面再套一个repeat循环

K<-10000
a<-1
r<-0.04
Bt<-c()
Nmin<-c()
Bt<-as.numeric(0.3*K)
Kill<-129
####先求t——t+1之间的N###

for (t in 1:100) {
    Bt<-Bt+r*Bt*(1-Bt/K)
    if(t%%4==0){
    set.seed(555)
    Nmean<-rnorm(1000,mean=Bt,sd=Bt*0.2)
    Nmean<-sample(Nmean, size=1, replace=FALSE)
    set.seed(777)
    Nmin<-rnorm(1000,mean=Nmean,sd=Nmean*0.2)
    PBR=min(Nmin)*0.1*1.04   
    set.seed(666)
    Kill<-rnorm(1000,mean=PBR,sd=PBR*0.2)
    Kill<-sample(Kill, size=1, replace=FALSE)
    Bt=Bt-Kill
    Kill<-Kill
    print(Bt)
    }
   else{
    Bt=Bt-Kill
    print(Bt)
}
}
你好,我就想这个for循坏重复1000次,因为里面rnorm是随即数,它跑出来的数t~t+1年的数应该每一这个循环都会不一样,就是一个模拟过程

Tom小太子 发表于 2022-6-16 16:22:34

Tom小太子 发表于 2022-6-16 16:21
K

j<-1
repeat{
Bt<-Bt
j<-j+1
if(j<=1000)next else break
}
我刚尝试了一下repeat,用矩阵的话,跑出来的结果好像不对

傻眼貓咪 发表于 2022-6-16 16:30:42

Tom小太子 发表于 2022-6-16 16:22
j

如果结果不对,可能是代码有错了,应该和循环没有关系

Tom小太子 发表于 2022-6-16 16:33:44

傻眼貓咪 发表于 2022-6-16 16:30
如果结果不对,可能是代码有错了,应该和循环没有关系

好的,谢谢
页: [1]
查看完整版本: 想请教一个R语言循环