我正在尝试迭代一个for循环,其中调用了3个不同的向量。更具体地说,我尝试查看不同站点达到其承载能力需要多长时间。从本质上讲,我想确定不同人群需要多长时间才能达到各自的承载能力。
截至目前,我已将其设置为在不同的时间步长成功打印丰度。
tspan <- 80
N <- matrix(0,tspan,1)
N[1] <- 20
K <- 13626
r <- 0.32
for (t in 2:tspan){
N[t] <- N[t-1]*exp(r*(1-N[t-1]/K))
print(N)
}
尽管即使这样,也会输出打印出N = tspan次的相同矢量。最终目的是在不同K值的向量上迭代上述for循环:
K<-c(208, 543, 557, 831, 831, 878, 933, 970, 1022, 1039)
,然后将所有这些存储在数据帧中。我已经尝试过使用嵌套的for循环,但是我不确定如何完成此操作,因为所有必要的值都是1方程式中的引用。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用sapply
K <- c(208, 543, 557, 831, 831, 878, 933, 970, 1022, 1039)
out <- sapply(K, function(x) {
for (t in 2:tspan){
N[t] <- N[t-1]*exp(r*(1-N[t-1]/x))
} # ^ note the x instead of K here
N
})
结果
head(as.data.frame(out))
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 20.00000 20.00000 20.00000 20.00000 20.00000 20.00000 20.00000 20.00000 20.00000 20.00000
#2 26.70800 27.21983 27.22790 27.33125 27.33125 27.34252 27.35427 27.36143 27.37062 27.37342
#3 35.29968 36.88868 36.91432 37.24457 37.24457 37.28077 37.31856 37.34160 37.37119 37.38022
#4 46.04258 49.70798 49.76899 50.56016 50.56016 50.64751 50.73882 50.79455 50.86620 50.88810
#5 59.07051 66.47804 66.60632 68.28529 68.28529 68.47241 68.66838 68.78819 68.94243 68.98963
#6 74.28092 88.03152 88.28178 91.59706 91.59706 91.97116 92.36397 92.60462 92.91501 93.01011