在列表元素内复制以生成嵌套列表
replicate within list element to make nested list
假设我们有
a <- list(letters[1:4],letters[5:6])
我们如何在每个元素中复制以获得像
这样的列表
b <- list(list(letters[1:4],letters[1:4]),list(letters[5:6],letters[5:6]))
我可以制作一个空列表,让 a[1] 和 a[2] 用复制的向量填充它,然后将它们全部添加到一个大列表中。
但我认为应该有一个我想念的快速方法?
我做到了
lapply(a, function(x){replicate(2,x, simplify=FALSE)})
但是索引看起来很奇怪
例如
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] "a" "b" "c" "d"
[[1]][[1]][[2]]
[1] "a" "b" "c" "d"
您可以将 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(...)
的输出,而不是实际结果。
这是一种选择:
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"
假设我们有
a <- list(letters[1:4],letters[5:6])
我们如何在每个元素中复制以获得像
这样的列表b <- list(list(letters[1:4],letters[1:4]),list(letters[5:6],letters[5:6]))
我可以制作一个空列表,让 a[1] 和 a[2] 用复制的向量填充它,然后将它们全部添加到一个大列表中。
但我认为应该有一个我想念的快速方法?
我做到了
lapply(a, function(x){replicate(2,x, simplify=FALSE)})
但是索引看起来很奇怪 例如
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] "a" "b" "c" "d"
[[1]][[1]][[2]]
[1] "a" "b" "c" "d"
您可以将 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(...)
的输出,而不是实际结果。
这是一种选择:
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"