我正在尝试使用以下(嵌套)结构创建一个列表:
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) )
同样失败了。
如何复制列表清单?
答案 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)