让我跳到一个例子中:
a <- list()
b <- list()
c <- list()
i.list <- list(a,b,c)
for(i in i.list){ i[[1]] <- "some entry" }
这不会奏效,我的问题有两个:
当我使用
时 for(i in i.list){ print(class(i)) }
我得到i
,即循环指示符,被识别为列表,这正是我所期望的。我的理解是,当我想在列表中添加内容时,我可以使用诸如
a[[1]] <- "some entry"
当我手动操作时确实有效。当在上述列表中使用时,它似乎不起作用,这让我感到困惑。我的理解是在for
- 循环中发生以下情况:在第一次迭代中,i
假定i.list
的第一个值,并且命令应该被评估为a[[1]] <- "some entry"
}。在第二次迭代中,这变为b[[1]] <- "some entry"
等等。但显然,这不会发生。
任何人都可以帮助我弄清楚如何使这项工作,最重要的是清除它为什么不能工作?我对循环中发生的事情的理解有什么问题?
注意:我知道很多人会建议不要使用循环,我完全赞同。但是,我只有几个要循环的元素,for
- 循环的清晰度超过了我的特定应用程序中的任何效率增益。此外,在这一刻,对我来说更重要的是要理解为什么这不起作用,因为我真的好奇地理解R内部。
答案 0 :(得分:1)
这是一个范围问题,例如这表明您的解决方案&#34;工作&#34;:
for (i in i.list){ i[[1]] <- "some entry"; print(i) }
由于i
仅在for
循环的本地范围内定义,因此更改不会影响全局环境中i.list
的元素。
这个例子应该像预期的那样工作:
for (i in seq(along=i.list)) { i.list[[i]][[1]] <- "some entry" }