我如何遍历另一个循环来填充矩阵
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
}
我收到的错误是“下标越界”,但我尝试修改但不确定哪里出错了。
我认为这里发生了很多事情。
- 首先,您的矩阵 z_pred 的维度为 267,400,但您在最内层循环中的调用试图分配给该矩阵中不存在的列。例如,当
t=11
和 i=40
时,您将尝试分配给第 440 列。
- 您正在尝试将大小为 267x4 的数据帧传递给 rbinom 函数的 prob 参数。我认为您想在这里做的是传递
t
列中的 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
}
我有一个循环,它本身就可以很好地工作。我本质上想要做的是重复同一个循环 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
}
我收到的错误是“下标越界”,但我尝试修改但不确定哪里出错了。
我认为这里发生了很多事情。
- 首先,您的矩阵 z_pred 的维度为 267,400,但您在最内层循环中的调用试图分配给该矩阵中不存在的列。例如,当
t=11
和i=40
时,您将尝试分配给第 440 列。 - 您正在尝试将大小为 267x4 的数据帧传递给 rbinom 函数的 prob 参数。我认为您想在这里做的是传递
t
列中的 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
}