在多个向量上应用for循环

时间:2019-04-07 21:10:32

标签: r dataframe for-loop vector apply

我正在尝试迭代一个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方程式中的引用。任何帮助将不胜感激。

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