1

最好举个例子:在我看来,这段代码应该生成 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]]?谢谢!

4

3 回答 3

6

问题是你不能用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)
于 2011-06-16T01:31:40.507 回答
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 个。

于 2011-06-16T00:35:55.840 回答
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
  }  
}
于 2011-06-16T00:27:31.750 回答