R-为for循环中的列表列表赋值

  • 本文关键字:列表 赋值 循环 for r list
  • 更新时间 :
  • 英文 :


我有两个问题。当使用for循环遍历R:中的列表列表时

  1. R在幕后做什么来复制for循环的内部列表
  2. 如何分配给列表以便在for循环之外使用

下面是我的列表的一个玩具示例,带有for循环:

list.outer = list(
list.inner1 = list(a=0),
list.inner2 = list(a=0)
)
for(l in list.outer){
l$a = 5
cat(l$a)
}
cat(list.outer$list.inner1$a,list.outer$list.inner2$a)

输出为:

5500

我希望它是:

5555

从我之前的互联网搜索中,我认为assign函数可以工作,但像assign(l$a,5)这样的琐碎解决方案不行。

编辑:我重新审视这一点,为任何遇到这一点的人分享一个新的解决方案。

具有类似行为的函数是lapply。这将一个列表和一个函数作为输入,应用于列表中的每个对象(在这种情况下,是每个inner.list(。它将把每个对象作为第一个参数交给函数,然后返回lapply返回的对象(在本例中,是每个修改的inner.list(,存储在一个新列表中:

list.outer = lapply(list.outer,function(innerlist){innerlist$a=5})

可能assign会给你输出,但通常最好避免它。阅读为什么使用assign不好?。在列表的索引上插入循环并更新列表本身。尝试:

for(l in seq_along(list.outer)) {
list.outer[[l]]$a  = 5
cat(list.outer[[l]]$a)
}
#55
cat(list.outer$list.inner1$a,list.outer$list.inner2$a)
#5 5

最新更新