如何仅使用purrr包从嵌套列表中提取元素?在这种情况下,我希望在分割data.frame后得到一个截距矢量。我已经使用lapply()完成了我需要的东西,但我想只使用函数purrr包。
if
我尝试了map()和at_depth(),但似乎没有任何东西适合我。
答案 0 :(得分:14)
map
函数有一些速记编码用于索引嵌套列表。帮助页面中的一个有用的片段:
要深入索引嵌套列表,请使用多个值; c(“x”,“y”) 相当于z [[“x”]] [[“y”]]。
因此,使用嵌套索引的代码和map_dbl
(减少为向量),您只需执行以下操作:
mtcars %>%
split(.$cyl) %>%
map(~lm(mpg ~ wt, data = .)) %>%
map_dbl(c(1, 1))
4 6 8
39.57120 28.40884 23.86803
我还发现这个blog post引入了purrr 0.1.0很有用,因为它给出了一些我最终使用的速记编码的例子。
答案 1 :(得分:1)
使用扫帚的整洁功能
library(purrr)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(tidyr)
library(broom)
cyl_group<-mtcars %>% group_by(cyl) %>%
nest()
cyl_lm<-cyl_group %>% mutate(
mod=map(data,~lm(mpg ~ wt, data = .x))
) %>% mutate(coef=map(mod,~tidy(.x))) %>% unnest(coef)
cyl_lm
#> # A tibble: 6 x 8
#> # Groups: cyl [3]
#> cyl data mod term estimate std.error statistic p.value
#> <dbl> <list> <list> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 6 <tibble [7 x 10~ <lm> (Interce~ 28.4 4.18 6.79 1.05e-3
#> 2 6 <tibble [7 x 10~ <lm> wt -2.78 1.33 -2.08 9.18e-2
#> 3 4 <tibble [11 x 1~ <lm> (Interce~ 39.6 4.35 9.10 7.77e-6
#> 4 4 <tibble [11 x 1~ <lm> wt -5.65 1.85 -3.05 1.37e-2
#> 5 8 <tibble [14 x 1~ <lm> (Interce~ 23.9 3.01 7.94 4.05e-6
#> 6 8 <tibble [14 x 1~ <lm> wt -2.19 0.739 -2.97 1.18e-2
由reprex package(v0.3.0)于2020-08-19创建