2

可能重复:
如何在 R 中动态命名变量?

我有 10 个类型为 list 的对象,名为: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)

任何意见将不胜感激。

4

2 回答 2

4

这是常见问题解答 7.21。该常见问题解答中最重要的部分是最后一部分,它说不要那样做,而是将所有内容放入列表并在列表上进行操作。

您可以使用以下代码将对象放入列表中:

mylists <- lapply( 1:10, function(i) get( paste0('list',i) ) )

然后您可以使用以下代码进行替换:

mylists <- lapply( mylists, function(x) { x[[1]] <- FUN()
  x} )

现在,如果您想保存所有列表或删除所有列表,您只需使用一个需要处理的对象,而不是再次遍历名称。如果您想对每个列表执行其他操作,那么您只需通过一个简单的步骤在整个列表中使用 lapply 或 sapply 即可,而无需担心循环。如果需要,您可以命名列表的元素以匹配原始名称并以这种方式访问​​它们。将所有感兴趣的内容保存在一个列表中也会使您的代码更安全,更不可能意外覆盖或删除另一个对象。

于 2012-11-07T18:37:50.993 回答
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
}

作为循环。

于 2012-11-07T15:17:58.460 回答