复制列表以创建列表列表

时间:2012-10-05 13:24:29

标签: r list nested-lists

我正在尝试使用以下(嵌套)结构创建一个列表:

l <- list()
for(i in seq(5)) l[[i]] <- list(a=NA,b=NA)
> str(l)
List of 5
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA
 $ :List of 2
  ..$ a: logi NA
  ..$ b: logi NA

我想通过rep或类似方式执行此操作,因为我创建了一大堆空白列表,我将在稍后填写。(我知道我可以通过引用其下一个索引来扩展列表,但在索引两个索引时这不起作用。

我认为rep为此工作,但似乎没有。 ?rep给出了以下示例:

fred <- list(happy = 1:10, name = "squash")
rep(fred, 5)

返回:

> str(rep(fred, 5))
List of 10
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"
 $ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
 $ name : chr "squash"

换句话说,它会使列表变得扁平化。

我也尝试了list( rep(fred,5) )同样失败了。

如何复制列表清单?

2 个答案:

答案 0 :(得分:12)

我认为这与代理行为有关,你想在代表之前进行嵌套:

rep(list(fred),5)

str输出:

List of 5
 $ :List of 2
  ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ name : chr "squash"
 $ :List of 2
  ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ name : chr "squash"
 $ :List of 2
  ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ name : chr "squash"
 $ :List of 2
  ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ name : chr "squash"
 $ :List of 2
  ..$ happy: int [1:10] 1 2 3 4 5 6 7 8 9 10
  ..$ name : chr "squash"

答案 1 :(得分:4)

您可以使用replicate

l <- replicate(5, list(a=NA,b=NA), simplify=FALSE)