使用 map 和 pluck 从嵌套列表中获取值
Using map and pluck to get values from nested list
我有以下讨厌的嵌套列表
编辑:更新为包括 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
我知道我可以在 for 循环中使用以下代码
mylist[[x]]$nested_1$nested_2[[y]]$value_I_want
但是我想提高我的地图技能。当列表是单级时,我了解如何使用 map_chr
但我没有找到很多关于从非常嵌套的列表中提取的资源。我也知道我可以使用 [[
但还没有找到合适的文档?
感谢任何帮助!
如果我们需要'yay'
library(purrr)
library(dplyr)
map(mylist, ~ .x$nested_1$nested_2 %>% unlist%>% grep("^yay", ., value = TRUE))
或者使用pluck
在map
循环遍历list
之后根据键'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"))
第二个 pluck 在第一个 pluck 设置的嵌套级别上运行。
这也适用于缺少中间名称的嵌套列表,这在从互联网上提取的 JSON 数据中经常发现。
我有以下讨厌的嵌套列表
编辑:更新为包括 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
我知道我可以在 for 循环中使用以下代码
mylist[[x]]$nested_1$nested_2[[y]]$value_I_want
但是我想提高我的地图技能。当列表是单级时,我了解如何使用 map_chr
但我没有找到很多关于从非常嵌套的列表中提取的资源。我也知道我可以使用 [[
但还没有找到合适的文档?
感谢任何帮助!
如果我们需要'yay'
library(purrr)
library(dplyr)
map(mylist, ~ .x$nested_1$nested_2 %>% unlist%>% grep("^yay", ., value = TRUE))
或者使用pluck
在map
list
之后根据键'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"))
第二个 pluck 在第一个 pluck 设置的嵌套级别上运行。
这也适用于缺少中间名称的嵌套列表,这在从互联网上提取的 JSON 数据中经常发现。