Использование map и pluck для получения значений из вложенного списка - PullRequest
1 голос
/ 29 марта 2020

У меня есть следующий неприятный, вложенный список

Редактировать: обновлено, чтобы включить value_I_dont_want

mylist <- list(
  list(
    nested_1 = list(
      nested_2 = list(
        list( value_I_want = "a", value_I_dont_want = "f"),
        list( value_I_want = "b", value_I_dont_want = "g")
      )
    )
  ),
  list(
    nested_1 = list(
      nested_2 = list(
        list( value_I_want = "c", value_I_dont_want = "h"),
        list( value_I_want = "d", value_I_dont_want = "i"),
        list( value_I_want = "e", value_I_dont_want = "j")
      )
    )
  )
)

И я хочу получить все value_I_want s

Я знаю, что могу использовать следующий код в пределах для l oop

mylist[[x]]$nested_1$nested_2[[y]]$value_I_want

Но я хочу улучшить свои навыки карт. Я понимаю, как использовать map_chr, когда список представляет собой один уровень, но я не нашел много ресурсов для извлечения из очень вложенных списков. Я также знаю, что могу использовать [[, но не нашел хорошей документации, когда это уместно?

Любая помощь приветствуется!

1 Ответ

1 голос
/ 29 марта 2020

Если нам нужно 'yay's

library(purrr)
library(dplyr)
map(mylist, ~ .x$nested_1$nested_2 %>% unlist%>% grep("^yay", ., value = TRUE))

или использовать pluck для извлечения элементов на основе ключа' value_I_want 'после зацикливания list с map

map(mylist, ~ .x$nested_1$nested_2 %>% 
                     map(pluck, "value_I_want") )
...