purrr:如何提取列表元素的内容(而不是元素)

purrr: How to pluck a list element's contents (instead of the element)

在我有小标题列表的情况下,我有时会 purrr::keep() 多个元素,然后使用 reduce() 组合以得到小标题,但是当我 purrr::pluck()purrr::keep() 只有一个,做一个 reduce 没有意义。获取小标题的最佳方法是什么,而不是包含小标题的列表元素?

我发现 keep() %>% enframe() %>% unnest() 在某些情况下有效,但在其他情况下无效,但无论如何看起来都很混乱。

其他尝试:

require(tidyverse)
#> Loading required package: tidyverse
mylist <- lst(cars, diamonds)

mylist %>% pluck("cars") %>% typeof
#> [1] "list"

mylist %>% pluck("cars") %>% as.tibble() %>% typeof
#> [1] "list"

mylist %>% pluck("cars")[1]
#> Error in .[pluck("cars"), 1]: incorrect number of dimensions

mylist %>% pluck("cars")[[1]]
#> Error in .[[pluck("cars"), 1]]: incorrect number of subscripts

mylist %>% pluck("cars") %>% unlist() %>% typeof
#> [1] "double"

mylist %>% pluck("cars") %>% unnest() %>% typeof
#> [1] "list"

mylist %>% pluck("cars") %>% flatten %>% typeof
#> [1] "list"

reprex package (v0.2.0) 创建于 2018-03-20。

目标是获得小费。

没有什么比做一堆 reprex 来解决您自己的(愚蠢的)问题更好的了!

这是其他人的交易:

1) return "list" 来自 typeof() 的所有小标题(这就是让我失望的原因)

2) keep 用于多个元素。因此,要达到目的,您必须进行某种减少(bind_rowsleft_join 等)。

3) pluck 用于单个元素,将 return 元素内容。

我从 Hadley 那里偷了这个例子并更新了 purrr 函数: