我如何遍历另一个循环来填充矩阵

How do I loop over another loop to fill a matrix

我有一个循环,它本身就可以很好地工作。我本质上想要做的是重复同一个循环 100 次以上,以填充比原始矩阵大 100 倍的矩阵。

nsite - 267
nyear - 14
#pred.occ is a data.frame of 14 columns and 267 rows 
z_pred <- array(NA, dim = c(nsite, 4*100)) # my matrix
for (i in 1:100) {  
# Generate presence/absence (i.e., the truth) in subsequent years
for(t in 11:nyear){
  z_pred[,t*i] <- rbinom(n = nsite, size = 1, prob = pred.occ[,11:nyear])
}
sum_occupancy <- apply(z_pred, 2, sum) / nsite # predicted occupancy proportion
}

我收到的错误是“下标越界”,但我尝试修改但不确定哪里出错了。

我认为这里发生了很多事情。

  1. 首先,您的矩阵 z_pred 的维度为 267,400,但您在最内层循环中的调用试图分配给该矩阵中不存在的列。例如,当 t=11i=40 时,您将尝试分配给第 440 列。
  2. 您正在尝试将大小为 267x4 的数据帧传递给 rbinom 函数的 prob 参数。我认为您想在这里做的是传递 t
  3. 列中的 267 个概率

这是一个可能对你有帮助的修订版

z_pred <- array(NA, dim = c(nsite, 4*100)) # my matrix
for (i in 1:100) {  
  # Generate presence/absence (i.e., the truth) in subsequent years
  for(t in 11:nyear) {
    z_pred[,100*(t-11) + i] <- rbinom(n = nsite, size = 1, prob =pred.occ[,t])
  }
  sum_occupancy <- apply(z_pred, 2, sum) / nsite # predicted occupancy proportion
}