r-使用map和pull从嵌套列表中获取值



我有以下讨厌的嵌套列表

编辑:更新为包括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

我知道我可以在for循环中使用以下代码

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

但我想提高我的地图技能。我知道当列表是单个级别时如何使用map_chr,但我还没有找到很多关于从嵌套列表中提取的资源。我也知道我可以使用[[,但还没有找到合适的文档?

感谢您的帮助!

如果我们需要'yay's

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

或者在使用map循环list之后,使用pluck基于关键字"value_I_want"提取元素

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

一个更通用的解决方案,只需要我们知道所需值的嵌套深度:

map(mylist, ~pluck(.,1,1) %>% map(pluck, "value_I_want")) 

第二次拔出操作在由第一次拔出设置的嵌套级别上进行。

这也适用于缺少中间名称的嵌套列表,通常在从互联网上提取的JSON数据中可以找到。

最新更新