连接时展平列表

flatten a list while concatenating

有没有一种简单的方法可以在连接时展平列表列表。我的问题可能最好用一个例子来解释。

当我执行下面的代码时。

> a <- c(list(list(a=1,b=2), list(a=3,b=4)), list(a=5,b=6))
> print(a)

[[1]]
[[1]]$a
[1] 1

[[1]]$b
[1] 2


[[2]]
[[2]]$a
[1] 3

[[2]]$b
[1] 4


$a
[1] 5

$b
[1] 6

我希望得到与我这样做相同的结果。

> a <- c(list(a=1,b=2), list(a=3,b=4), list(a=5,b=6))
> print(a)
$a
[1] 1

$b
[1] 2

$a
[1] 3

$b
[1] 4

$a
[1] 5

$b
[1] 6

我想你可以使用 unlistrapply,但我会提防任何名称重复的东西:

as.list(unlist(a))
# $a
# [1] 1
# 
# $b
# [1] 2
# 
# $a
# [1] 3
# 
# $b
# [1] 4
# 
# $a
# [1] 5
# 
# $b
# [1] 6

as.list(rapply(a, unlist)) 也应该有效——不确定使用它是否有优势....


一个(可能)更好的主意是看看这个 LinearizeNestedList function 我遇到的,它可以让你展平一个列表,但分配名称以便你可以确定它们在第一个中的位置地方。

将其加载到您的工作区后,用法将很简单:

LinearizeNestedList(a)