最好举一个例子:这个代码应该按照我看到的方式生成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]]呢?谢谢!
而不是在全球环境中制作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个.
问题是你不能用来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)