簡體   English   中英

使用 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's

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

或利用pluck循環在后提取基於密鑰“value_I_want”的元素listmap

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

一個更通用的解決方案,只需要我們知道所需值的嵌套深度:

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

第二個 pluck 在第一個 pluck 設置的嵌套級別上運行。

這也適用於缺少中間名稱的嵌套列表,如從 Internet 提取的 JSON 數據中經常發現的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM