我有10个类型列表对象,名为:list1
,list2
,...,list10
。我想通过FUN
循环使用我的函数for
的输出来替换这些列表变量的第一个索引:
for (i in 1:10){
eval(parse(test=(paste("list",i,sep=""))))[[1]] <- FUN()
}
但这不起作用。我也以这种方式使用了lapply
,但又错了:
lapply(eval(parse(text=(paste("list",i,sep=""))))[[1]], FUN)
任何意见都将不胜感激。
答案 0 :(得分:4)
这是FAQ 7.21。该常见问题解答中最重要的部分是最后一部分说不要这样做,而是将所有内容放入列表并在列表中操作。
您可以使用以下代码将对象放入列表中:
mylists <- lapply( 1:10, function(i) get( paste0('list',i) ) )
然后你可以使用以下代码进行替换:
mylists <- lapply( mylists, function(x) { x[[1]] <- FUN()
x} )
现在,如果要保存所有列表或删除所有列表,只需要一个对象就可以使用,而不是再次遍历名称。如果您想对每个列表执行其他操作,那么您只需在一个简单的步骤中使用lapply或sapply就可以在整个列表中使用,而无需担心循环。如果需要,可以将列表的元素命名为与原始名称匹配,并以这种方式访问它们。将所有感兴趣的内容保存在单个列表中也可以使您的代码更安全,更不可能意外地覆盖或删除其他对象。
答案 1 :(得分:2)
你可能想要像
这样的东西for (i in 1:10) {
nam <- paste0("list", i) ## built the name of the object
tmp <- get(nam) ## fetch the list by name, store in tmp
tmp[[1]] <- FUN() ## alter 1st component of tmp using FUN()
assign(nam, value = tmp) ## assign tmp back to the current list
}
作为循环。