использование purrr для извлечения элементов из нескольких списков, начинающихся с общей буквы - PullRequest
0 голосов
/ 06 июня 2018

У меня есть список списков.Один элемент в каждом списке имеет имя, начинающееся с «n_».Как извлечь эти элементы и сохранить их в отдельном списке?Могу ли я использовать комбинацию map и starts_with?

Например:

m1 <- list(n_age = c(19,40,39),
       names = c("a", "b", "c"))

m2 <- list(n_gender = c("m","f","f"),
       names = c("f", "t", "d"))

nice_list <- list(m1, m2)

Я надеялся, что что-то вроде следующего будет работать (это не так!):

output <- map(nice_list, starts_with("n_"))

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Вы можете (ab) использовать частичное сопоставление $:

map(nice_list, `$`, "n_")

(я не очень рекомендую это).

(И я не могу понять, почемуlapply(nice_list, `$`, "n_") не работает (дает list(NULL, NULL)).

0 голосов
/ 06 июня 2018

Как насчет этого?

map(nice_list, ~.x[grep("n_", names(.x))])
#[[1]]
#[[1]]$n_age
#[1] 19 40 39
#
#
#[[2]]
#[[2]]$n_gender
#[1] "m" "f" "f"

Или с помощью starts_with

map(nice_list, ~.x[starts_with("n_", vars = names(.x))])

Или для выравнивания вложенных list, вы можете сделать

unlist(map(nice_list, ~.x[grep("n_", names(.x))]), recursive = F)
#$n_age
#[1] 19 40 39
#    
#$n_gender
#[1] "m" "f" "f"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...