Как создать список из списка на основе имени - PullRequest
2 голосов
/ 26 июня 2019

Мне дан список списков.Теперь я хотел бы подгруппировать список на основе имен подсписка.

 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 ]

1 голос
/ 26 июня 2019

Самореклама. Если кто-то открыт для использования пакетов, я написал удобную функцию в версии для разработчиков manymodelr , которая достигает того же самого.

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

[[2]]
     [,1] [,2]
[1,]    5    7
[2,]    6    8
1 голос
/ 26 июня 2019

Мы можем 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)
...