Forloop,条件语句,存储数据

时间:2016-12-24 14:56:24

标签: r

我想在forloop中完成什么,但仍然遇到困难:

prb[i]=(prb[i-1]*ER)+b[i]
prb[1]=(prb[0]*ER)+b[1]
prb[2]=(prb[1]*ER)+b[2] 

然后从等式的左边输出prb [1,2,3 ....]。

此外,定义SS以反映前一时间步骤的prb(即(prb-1))

我试图在空载体中保存我的forloop的结果。但是,输出到矢量中的值是相同的值(即从第一次迭代开始),并且它似乎没有具有我正在尝试的加性效应。某些事情似乎与我的代码逻辑有关。我希望b [i]中的值在b [i + 1]中用于forloop的下一次运行。有没有人对问题有任何想法或解决方案?最好!

马修

#Parameters
c=0.2
A=5
d=8
d0=5
s=0.5
e=0.1
p=0.6
ER=e/A

#Colonization Equation Probabilities
C2 = c*A*exp(-d*s/d0)               #ML to SS

#Empty Vectors
l=vector(mode="numeric", length=100) #open vectors to store the different probability values from the forloop
b=vector(mode="numeric", length=100) 
prb=(l*ER) + b     #total probability of SS being colonized 

#Island States
ML=1                    
SS=prb         
n.I=c(ML, SS)   

#Forloop and Conditional Statements

for(i in 2:101) {

  (SS[i]=prb[i-1])
  (prb[i]=(l[i]*ER)+b[i])

  if (SS < 1 ) { 
    (l[i]=prb[i-1])
 } else if(SS < 1){
    b[i]=C2
  }   
}

1 个答案:

答案 0 :(得分:0)

我复制了你的代码然后运行它。我的观察是:

  • 首先,在R中,矢量索引从1开始而不是0。
  • 所以SS = prb [0:1]产生的prb [0]只是0。
  • 由于执行用于填充prb的行是以SS为&gt; = 1为条件的,因此您永远不能使用此条件运行此行。当prb [1]不是1或更大时,你不能改变它,所以有一个恶性循环。
  • 即使你可以通过满足条件(当然是另一个条件)来运行它,因为对于第一次迭代,prb [0]不存在,所以prb [0] * ER只产生数字(0),这是一个空载体项目!

首先你应该修改你的矢量索引,然后你应该修改你的条件,以便它允许一个快速启动。