如何从列表列表中删除列表级别

时间:2013-06-18 09:00:40

标签: r list

我在列表中创建了一些列表,并且希望能够将每个子列表元素作为顶层的单个元素。

例如,创建一些虚拟数据:

pp <- lapply(10:15,function(y){
    lapply(10:20,function(z){
        as.data.frame(matrix(rnorm(z*y),nrow=z,ncol=y))
    })  
})

这会创建以下输出

> summary(pp)
     Length Class  Mode
[1,] 11     -none- list
[2,] 11     -none- list
[3,] 11     -none- list
[4,] 11     -none- list
[5,] 11     -none- list
[6,] 11     -none- list

你也可以这样做

> summary(pp[[1]])
      Length Class      Mode
 [1,] 10     data.frame list
 [2,] 10     data.frame list
 [3,] 10     data.frame list
 [4,] 10     data.frame list
 [5,] 10     data.frame list
 [6,] 10     data.frame list
 [7,] 10     data.frame list
 [8,] 10     data.frame list
 [9,] 10     data.frame list
[10,] 10     data.frame list
[11,] 10     data.frame list

结果输出只会创建一个新列表,如下所示:

new.pp[[1]] <- pp[[1]][[1]]
new.pp[[2]] <- pp[[1]][[2]]

但是想知道当你在列表中有列表时,是否有一种智能或更有效的方法来删除一个级别的列表....

理想情况下,我正在寻找的是某种为我提供此功能的功能,因此,如果我有多个级别的列表彼此嵌套而不是仅仅两个,我可以重新咒骂地使用该功能在每个级别最终将每个元素放在列表顶部...

2 个答案:

答案 0 :(得分:36)

我认为这可以解决问题

new.pp <- unlist(pp,recursive=FALSE)

答案 1 :(得分:1)

Tidyverse方法:

library(purrr)
new.pp <- flatten(pp)