连接时展平列表
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
我想你可以使用 unlist
或 rapply
,但我会提防任何名称重复的东西:
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)
有没有一种简单的方法可以在连接时展平列表列表。我的问题可能最好用一个例子来解释。
当我执行下面的代码时。
> 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
我想你可以使用 unlist
或 rapply
,但我会提防任何名称重复的东西:
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)