簡體   English   中英

purrr::pluck - 如何獲取列表的最后一個元素

[英]purrr::pluck - how to get last element of list

我正在嘗試提取嵌套列表的最后一個元素。 我怎么能用purrr做到這一點? 在下面的示例中,結果應該是值為“c”的所有元素。 我見過這個,但我對 purrr 的解決方案特別感興趣。

非常感謝

x <- list(list(1,2,"c"), list(3,"c"), list("c"))
x
#> [[1]]
#> [[1]][[1]]
#> [1] 1
#> 
#> [[1]][[2]]
#> [1] 2
#> 
#> [[1]][[3]]
#> [1] "c"
#> 
#> 
#> [[2]]
#> [[2]][[1]]
#> [1] 3
#> 
#> [[2]][[2]]
#> [1] "c"
#> 
#> 
#> [[3]]
#> [[3]][[1]]
#> [1] "c"

map(x, purrr::pluck, tail)
#> Error in map(x, purrr::pluck, tail): could not find function "map"
map(x, purrr::pluck, length(x))
#> Error in map(x, purrr::pluck, length(x)): could not find function "map"

代表 package (v2.0.0) 於 2021 年 5 月 21 日創建

使用base R ( R 4.1.0 )

lapply(x, \(y) tail(y, 1)[[1]])
#[[1]]
#[1] "c"

#[[2]]
#[1] "c"

#[[3]]
#[1] "c"

簡單地使用purrr::pluck

library(purrr)

map(x, ~ pluck(.x, length(.x)))

或者更容易使用dplyr::last

library(purrr)
library(dplyr)

map(x, last)

僅在基礎R中,反轉每個列表元素並取第一項:

lapply(x, function(y) rev(y)[[1]])

lapply(x, \(y) rev(y)[[1]]) # R >= 4.1.0

或者

mapply(`[[`, x, sapply(x, length), SIMPLIFY = F)

如果刪除參數SIMPLIFY = F將返回單個向量,因為默認值為TRUE

這通過並行迭代您的列表xsapply(x, length)的 output 並將其應用於 function `[[`來實現,這是一個提取運算符。

這會起作用嗎:

map(x, function(y) y[[length(y)]])
[[1]]
[1] "c"

[[2]]
[1] "c"

[[3]]
[1] "c"

您在每個列表中都有一個嵌套列表,我不確定它是否是故意的。 在當前的 state 中,這將起作用 -

library(purrr)

map(x, ~.x %>% unlist(recursive = FALSE) %>% tail(1))

#[[1]]
#[1] "c"

#[[2]]
#[1] "c"

#[[3]]
#[1] "c"

還有pluck ——

map(x, ~.x %>% unlist(recursive = FALSE) %>% pluck(length(.)))

暫無
暫無

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

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