【发布时间】:2014-01-08 15:51:10
【问题描述】:
我正在尝试编写一个嵌套循环代码来模拟 101 行数据框中的 10 列数据。第一行数据已被指定为起始值。每列应该不同,因为我的矩阵 r 是从随机法线生成的;但是,每列中的结果值完全相同。为循环索引提供一些上下文:
tmax=100; ncol(pop_sims) = 12 (so a total of 10 iterations, 3-12); ncol(r) = 10
for (i in 1:tmax){
for (j in 3:ncol(pop_sims)){
for(k in 1:ncol(r)){
if (pop_sims[i,j]*exp(r[i,k]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(r[i,k])}
}}}
任何想法都将不胜感激。
更新:我没有使用多个循环,而是省略了矩阵 r 的使用并简化了我的循环。
for (i in 1:tmax){
for (j in 1:10){
if (pop_sims[i,j]*exp(r[i,j]) <2) {
pop_sims[i+1,j]<- 0}
else {
pop_sims[i+1,j] <- pop_sims[i,j]*exp(rnorm(1,mean=0.02, sd=0.1))}
}}
【问题讨论】:
-
在您的第三个循环中,您为每个
k值覆盖pop_sims[i+1,j]。因此,pop_sims[i+1,j]将根据值k=ncol(r)设置;你甚至可能没有使用内循环。您能简要描述一下您要完成的工作吗? -
是的,我正在尝试将 pop_sims[i+1,j] 设置为前一个(同一列,上一行)值乘以同一列和行指定的随机法线 r(来自正在更新的单元格的矩阵 r)。理想情况下,每个 r 值将被使用一次。那有意义吗?有没有办法在循环内完成这个?
-
@josilber 我如上所述更新。我明白你的意思了。我想不出如何从循环中解决这个问题,所以我只是重新组织了我解决问题的方式。感谢您发现问题!
标签: r nested-loops