【问题标题】:How to remove a level of lists from a list of lists如何从列表列表中删除列表级别
【发布时间】:2013-06-14 10:07:34
【问题描述】:

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

例如创建一些虚拟数据:

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]]

但想知道当列表中有列表时是否有一种智能或更有效的方法可以仅删除一级列表....

理想情况下,我正在寻找某种可以为我执行此操作的函数,因此,例如,如果我有多个级别的列表相互嵌套,而不仅仅是两个,我可以递归地使用该函数在每个级别最终将每个元素带到列表的顶部...

【问题讨论】:

    标签: r list


    【解决方案1】:

    我认为这可以解决问题

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

    【讨论】:

    • 这样取消列出第一级,如果要取消列出最后一级呢?谢谢!
    【解决方案2】:

    Tidyverse 方法:

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

    【讨论】:

    • unlistflatten 的结果相同。
    • 是的,我发现 flatten 更直观且易于记忆。 :)
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2021-05-24
    • 2020-01-23
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多