【问题标题】:How to subset a list of a list based on the name如何根据名称对列表的列表进行子集化
【发布时间】:2019-11-08 14:27:37
【问题描述】:

我得到了一个列表列表。 我现在想根据子列表的名称对列表进行子集化。

 L1<-list("A"=matrix(c(1:4),2),"B"=matrix(c("a","b","c","d"),2))
 L2<-list("A"=matrix(c(5:8),2),"B"=matrix(c("u","v","w","x"),2))
 L<-list(L1,L2)

我现在想根据名称选择子列表的元素。例如

select_names <- c("A")

并获得一个列表列表,而子列表现在只包含名称属于“select_names”的元素。在这种情况下,它只是元素“A”:

[[1]]
[[1]]$`A`
     [,1] [,2]
[1,]    1    3
[2,]    2    4


[[2]]
[[2]]$`A`
     [,1] [,2]
[1,]    5    7
[2,]    6    8

【问题讨论】:

    标签: r list subset


    【解决方案1】:

    我们可以Extract

    library(purrr)
    map(L, `[`, select_names)
    #[[1]]
    #[[1]]$A
    #     [,1] [,2]
    #[1,]    1    3
    #[2,]    2    4
    
    
    #[[2]]
    #[[2]]$A
    #     [,1] [,2]
    #[1,]    5    7
    #[2,]    6    8
    

    或使用lapply

    lapply(L, function(x) x[select_names])
    

    或者没有匿名函数调用

    lapply(L, `[`, select_names)
    

    【讨论】:

      【解决方案2】:

      自我推销。如果有人愿意使用包,我在manymodelr的开发者版本中写了一个方便的功能,可以达到同样的效果。

      manymodelr::get_this(A,L)
      [[1]]
           [,1] [,2]
      [1,]    1    3
      [2,]    2    4
      
      [[2]]
           [,1] [,2]
      [1,]    5    7
      [2,]    6    8
      

      【讨论】:

      • 感谢您的回答,它也可以正常工作。然而,我更喜欢不使用额外的包。这就是我接受 akrun 回答的原因,因为我已经使用了 purrr resp。 tidyverse。
      • 别担心,很高兴你得到了答案。
      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2015-11-27
      • 2016-01-14
      • 2013-04-22
      • 2018-03-10
      • 1970-01-01
      • 2021-11-18
      相关资源
      最近更新 更多