使用assign动态更改循环中的列表名称?

1 loops r list assign

最好举一个例子:这个代码应该按照我看到的方式生成10个列表,每个列表包含100个元素.

for (i in 1:10){
assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep=".")[[j]], j+1)
  }
}
Run Code Online (Sandbox Code Playgroud)

但它没有..第一个分配工作正常,创建一个包含100个元素的空列表,但我怎么能填充元素[[j]]呢?谢谢!

Gre*_*now 6

而不是在全球环境中制作10个列表,只需制作列表列表就会简单得多:

mybiglist <- list()
for(i in 1:10) {
  mybiglist[[i]] <- list()
  for( j in 1:100 ) {
    mybiglist[[i]][[j]] <- j+1
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以为任何列表添加名称,也可以只通过数字下标访问这些部分.这也不会使您的全局环境受到污染,并且通常更容易调试.当你想对10个列表做一些事情时,你可以使用lapply/sapply而不需要打另一个循环.您还可以保存/加载/删除/浏览/等.一个单个对象而不是10个.


wkm*_*or1 5

问题是你不能用来assign为对象的元素赋值,除非你有点棘手.见下文.

for (i in 1:10){
  assign(paste("List", i, sep="."), vector("list", length=100))
  for (j in 1:100){
    assign(paste("List", i, sep="."), 
      {x <- get(paste("List", i, sep=".")) 
       x[[j]] <- j + 1 
       x})
  }
}

rm(i, j, x)
Run Code Online (Sandbox Code Playgroud)