15

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

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) )同样失败。

如何复制列表列表?

4

2 回答 2

18

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

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"
于 2012-10-05T13:39:05.220 回答
4

您可以使用replicate

l <- replicate(5, list(a=NA,b=NA), simplify=FALSE)
于 2012-10-05T13:42:15.580 回答