我得到以下y嵌套列表:
x1=c(12,54,2)
x2=c(2,88,1)
x3=c(4,8)
y=list()
y[[1]]=x1
y[[2]]=list(x2,x3)
y
[[1]]
[1] 12 54 2
[[2]]
[[2]][[1]]
[1] 2 88 1
[[2]][[2]]
[1] 4 8
Run Code Online (Sandbox Code Playgroud)
我想从此嵌套列表中提取所有元素,并将它们放入一个级别列表中,所以我的预期结果应该是:
y_one_level_list
[[1]]
[1] 12 54 2
[[2]]
[1] 2 88 1
[[3]]
[1] 4 8
Run Code Online (Sandbox Code Playgroud)
显然,真正的问题涉及更深层的嵌套列表,您将如何解决呢?我尝试了重击,但失败了。
你可以试试这个:
flatten <- function(lst) {
do.call(c, lapply(lst, function(x) if(is.list(x)) flatten(x) else list(x)))
}
flatten(y)
#[[1]]
#[1] 12 54 2
#[[2]]
#[1] 2 88 1
#[[3]]
#[1] 4 8
Run Code Online (Sandbox Code Playgroud)
尝试lapply与rapply:
lapply(rapply(y, enquote, how="unlist"), eval)
#[[1]]
#[1] 12 54 2
#[[2]]
#[1] 2 88 1
#[[3]]
#[1] 4 8
Run Code Online (Sandbox Code Playgroud)
它也适用于更深的列表。