鱼C论坛

 找回密码
 立即注册
查看: 1645|回复: 9

[已解决]想请教一个R语言循环

[复制链接]
发表于 2022-6-16 13:06:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  for (t in 1:100) {
    Bt[t+1]<-Bt[t]+r*Bt[t]*(1-Bt[t]/K)  
    if(t%%4==0){
    set.seed(555)
    Nmean<-rnorm(1000,mean=Bt[t+1],sd=Bt[t+1]*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[t+1]<-rnorm(1000,mean=PBR,sd=PBR*0.2)
    Kill[t+1]<-sample(Kill[t+1], size=1, replace=FALSE)
    Bt[t+1]=Bt[t+1]-Kill[t+1]
    Kill<-Kill[t+1]
    print(Bt[t+1])
    }
   else{
    Bt[t+1]=Bt[t+1]-Kill
    print(Bt[t+1])
  }  
}

  plot(Bt)

####重复1000次####这个结果不太符合我的预期,想知道自己哪里出错了
K<-10000
r<-0.04
Bt<-c()
Nmin<-c()
Bt<-matrix(NA,101,1000)
Nmin<-c()
Nmean<-c()
Bt[1,]<-as.numeric(0.3*K)
Kill<-129
####先求t——t+1之间的N###
for (j in 1:1000) {
  for (t in 1:100) {
    Bt[t+1,j]<-Bt[t,j]+r*Bt[t,j]*(1-Bt[t,j]/K)
    if(t%%4==0){
      Nmean<-rnorm(1000,mean=Bt[t+1,j],sd=Bt[t+1,j]*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[t+1], size=1, replace=FALSE)
      Bt[t+1,j]=Bt[t+1,j]-Killnew
      Kill<-Killnew
    }
    else{
      Bt[t+1,j]=Bt[t+1,j]-Kill
      
    }  
  }
}
View(Bt)
最佳答案
2022-6-16 14:17:05
可以在外面再套一个repeat循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-16 13:38:46 | 显示全部楼层
可以在外面再套一个for循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 14:17:05 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
可以在外面再套一个repeat循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 15:49:56 | 显示全部楼层
临时号 发表于 2022-6-16 13:38
可以在外面再套一个for循环

你好,下面重复1000次的就是用for循环,但是结果不太对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 15:59:24 | 显示全部楼层
傻眼貓咪 发表于 2022-6-16 14:17
可以在外面再套一个repeat循环

你好Bt【t+1】是100个数字,怎样让他repeat的呀?转化成矩阵么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 16:02:59 From FishC Mobile | 显示全部楼层
Tom小太子 发表于 2022-6-16 15:59
你好Bt【t+1】是100个数字,怎样让他repeat的呀?转化成矩阵么

请问你想实现什么?有题目吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 16:21:44 | 显示全部楼层
傻眼貓咪 发表于 2022-6-16 14:17
可以在外面再套一个repeat循环

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

  for (t in 1:100) {
    Bt[t+1]<-Bt[t]+r*Bt[t]*(1-Bt[t]/K)  
    if(t%%4==0){
    set.seed(555)
    Nmean<-rnorm(1000,mean=Bt[t+1],sd=Bt[t+1]*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[t+1]<-rnorm(1000,mean=PBR,sd=PBR*0.2)
    Kill[t+1]<-sample(Kill[t+1], size=1, replace=FALSE)
    Bt[t+1]=Bt[t+1]-Kill[t+1]
    Kill<-Kill[t+1]
    print(Bt[t+1])
    }
   else{
    Bt[t+1]=Bt[t+1]-Kill
    print(Bt[t+1])
  }  
}
你好,我就想这个for循坏重复1000次,因为里面rnorm是随即数,它跑出来的数t~t+1年的数应该每一这个循环都会不一样,就是一个模拟过程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 16:22:34 | 显示全部楼层

j<-1
repeat{
  Bt[t+1,]<-Bt[t+1,j]
  j<-j+1
  if(j<=1000)next else break
}
我刚尝试了一下repeat,用矩阵的话,跑出来的结果好像不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 16:30:42 From FishC Mobile | 显示全部楼层
Tom小太子 发表于 2022-6-16 16:22
j

如果结果不对,可能是代码有错了,应该和循环没有关系
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 16:33:44 | 显示全部楼层
傻眼貓咪 发表于 2022-6-16 16:30
如果结果不对,可能是代码有错了,应该和循环没有关系

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 16:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表