在list元素中复制以生成嵌套列表

时间:2015-02-05 19:58:12

标签: r list nested

说我们有

a <- list(letters[1:4],letters[5:6])

我们如何在每个元素中复制以获得类似

的列表
b <- list(list(letters[1:4],letters[1:4]),list(letters[5:6],letters[5:6]))

我可以创建一个空列表,对于[1]和[2]用复制的向量填充它然后将它们全部添加到一个大列表中。

但我认为应该有一个我错过的快捷方式?

我做了

lapply(a, function(x){replicate(2,x, simplify=FALSE)})

但索引似乎很奇怪 e.g。

[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] "a" "b" "c" "d"

[[1]][[1]][[2]]
[1] "a" "b" "c" "d"

2 个答案:

答案 0 :(得分:2)

这是一个选项:

lapply(a, function(X) rep(list(X), 2))
# [[1]]
# [[1]][[1]]
# [1] "a" "b" "c" "d"
# 
# [[1]][[2]]
# [1] "a" "b" "c" "d"
# 
# 
# [[2]]
# [[2]][[1]]
# [1] "e" "f"
# 
# [[2]][[2]]
# [1] "e" "f"

答案 1 :(得分:1)

您可以将replicate应用于列表中的每个元素。我们在这里使用lapply

lapply(a, replicate, n=2, simplify=F)

nsimplify是由lapply转发给replicate的参数(请参阅?replicate)。这会产生:

List of 2
 $ :List of 2
  ..$ : chr [1:4] "a" "b" "c" "d"
  ..$ : chr [1:4] "a" "b" "c" "d"
 $ :List of 2
  ..$ : chr [1:2] "e" "f"
  ..$ : chr [1:2] "e" "f"

请注意,为了清晰起见,我们会显示str(...)的输出,而不是实际结果。