如何根据名称对列表的列表进行子集化

时间:2019-06-26 15:24:27

标签: r list subset

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

 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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

自我提升。如果愿意使用软件包,我会在manymodelr的开发人员版本中编写一个便捷功能,实现相同功能。

manymodelr::get_this(A,L)
[[1]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

[[2]]
     [,1] [,2]
[1,]    5    7
[2,]    6    8
相关问题