说我们有
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"
答案 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)
n
和simplify
是由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(...)
的输出,而不是实际结果。