将多个列表列表组合成一个列表列表的功能?
Function to combine multiple lists of lists into a single list of lists?
假设我们有列表l
,这是一个列表列表。
a <- list(c(1,2,3))
b <- list(c(4,5,6), c(7,8,9))
c <- list(c(10,11,12), c(13,14,15), c(16,17,18))
l <- list(a, b, c)
所以 l
是一个列表列表,其中每个列表本身至少包含一个列表。
问题
我如何制作一个可以将所有最低级别列表提取到单个列表列表中的函数?
# Goal
list(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12), c(13,14,15), c(16,17,18))
备注:
这个例子是一个最小的可重现的例子,它可以硬编码一个解决方案,但是解决方案的泛化很重要,因为真正的问题有成千上万每个列表都包含未知数量的列表 - 因此硬编码解决方案绝对无法扩展!
如果可能的话,我希望在 base R 中找到解决方案。
到目前为止我尝试过的一些事情
一些不成功的尝试,主要使用sapply()
和unlist()
:
sapply(l, function(x) { unlist(x) })
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 4 5 6 7 8 9
#
# [[3]]
# [1] 10 11 12 13 14 15 16 17 18
unlist(a)
# [1] 1 2 3
# unlist() seems to combine the elements of multiple lists into one list (not desired here)..
unlist(b)
# [1] 4 5 6 7 8 9
我认为 论点看起来很有希望,但不幸的是我也无法让它做我想做的事:
unlist(b, recursive = FALSE)
# [1] 4 5 6 7 8 9
使用 unlist
,在您的初始列表上非递归。
unlist(l, recursive=FALSE)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 4 5 6
#
# [[3]]
# [1] 7 8 9
#
# [[4]]
# [1] 10 11 12
#
# [[5]]
# [1] 13 14 15
#
# [[6]]
# [1] 16 17 18
只需使用unlist()
:
a <- list(c(1,2,3))
b <- list(c(4,5,6), c(7,8,9))
c <- list(c(10,11,12), c(13,14,15), c(16,17,18))
l <- list(a, b, c)
l.want <- list(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12), c(13,14,15), c(16,17,18))
#Use unlist
l.func <- unlist(l, recursive = F)
all.equal(l.want, l.func)
# TRUE
假设我们有列表l
,这是一个列表列表。
a <- list(c(1,2,3))
b <- list(c(4,5,6), c(7,8,9))
c <- list(c(10,11,12), c(13,14,15), c(16,17,18))
l <- list(a, b, c)
所以 l
是一个列表列表,其中每个列表本身至少包含一个列表。
问题
我如何制作一个可以将所有最低级别列表提取到单个列表列表中的函数?
# Goal
list(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12), c(13,14,15), c(16,17,18))
备注:
这个例子是一个最小的可重现的例子,它可以硬编码一个解决方案,但是解决方案的泛化很重要,因为真正的问题有成千上万每个列表都包含未知数量的列表 - 因此硬编码解决方案绝对无法扩展!
如果可能的话,我希望在 base R 中找到解决方案。
到目前为止我尝试过的一些事情
一些不成功的尝试,主要使用sapply()
和unlist()
:
sapply(l, function(x) { unlist(x) })
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 4 5 6 7 8 9
#
# [[3]]
# [1] 10 11 12 13 14 15 16 17 18
unlist(a)
# [1] 1 2 3
# unlist() seems to combine the elements of multiple lists into one list (not desired here)..
unlist(b)
# [1] 4 5 6 7 8 9
我认为
unlist(b, recursive = FALSE)
# [1] 4 5 6 7 8 9
使用 unlist
,在您的初始列表上非递归。
unlist(l, recursive=FALSE)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 4 5 6
#
# [[3]]
# [1] 7 8 9
#
# [[4]]
# [1] 10 11 12
#
# [[5]]
# [1] 13 14 15
#
# [[6]]
# [1] 16 17 18
只需使用unlist()
:
a <- list(c(1,2,3))
b <- list(c(4,5,6), c(7,8,9))
c <- list(c(10,11,12), c(13,14,15), c(16,17,18))
l <- list(a, b, c)
l.want <- list(c(1,2,3), c(4,5,6), c(7,8,9), c(10,11,12), c(13,14,15), c(16,17,18))
#Use unlist
l.func <- unlist(l, recursive = F)
all.equal(l.want, l.func)
# TRUE