最好举一个例子:这个代码应该按照我看到的方式生成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)
}
}
但它没有..第一个赋值工作正常,创建一个包含100个元素的空列表,但是如何填充元素[[j]]呢?谢谢!
答案 0 :(得分:6)
不是在全球环境中制作10个列表,而是制作列表列表要简单得多:
mybiglist <- list()
for(i in 1:10) {
mybiglist[[i]] <- list()
for( j in 1:100 ) {
mybiglist[[i]][[j]] <- j+1
}
}
您可以为任何列表添加名称,也可以只通过数字下标访问这些部分。这也不会使您的全局环境受到污染,并且通常更容易调试。当你想对10个列表做一些事情时,你可以使用lapply / sapply而不需要打另一个循环。您还可以保存/加载/删除/浏览/等。一个单个对象而不是10个。
答案 1 :(得分: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)
答案 2 :(得分:1)
下面的代码生成10个列表,每个列表包含100个元素。
myList = list()
for (i in 1:10) {
myList[[i]] = 1:100
}
但是,不确定是否需要 10个向量列表或 10个列表列表
如果您想要后者,您可以执行以下操作:
myList = list()
for (i in 1:10) {
myList[[i]] = list()
for (j in 1:100) {
myList[[i]][[j]] = j
}
}