所以根据输入定义purrr::map,.f参数可以是:
[...]如果是字符或整数向量,例如"y",则将其转换为提取函数,函数(x)x [["y"]].要深入索引到嵌套列表,请使用多个值; c("x","y")等效于z [["x"]] [["y"]].您还可以设置.null为默认组件设置默认值而不是NULL.
所以应该可以传递一个VECTOR字符作为.f调用.但我无法弄明白该怎么做!很明显,如果我c('x','y')不能工作,因为该功能假定我正在向下钻取.那怎么办呢?一些代表:
library(purrr)
a <- mtcars %>%
split(.$cyl) %>% # from base R
map(~ lm(mpg ~ wt, data = .)) %>%
map(summary)
## Works
a %>% map_dbl("r.squared")
#> 4 6 8
#> 0.5086326 0.4645102 0.4229655
## Also works
a %>% map_dbl("sigma")
#> 4 6 8
#> 3.332283 1.165202 2.024091
## But how to get both at once?
a %>% map("r.squared","sigma")
#> $`4`
#> [1] 0.5086326
#>
#> $`6`
#> [1] 0.4645102
#>
#> $`8`
#> [1] 0.4229655
a %>% map(list("r.squared","sigma"))
#> $`4`
#> NULL
#>
#> $`6`
#> NULL
#>
#> $`8`
#> NULL
a %>% map(c("r.squared","sigma"))
#> $`4`
#> NULL
#>
#> $`6`
#> NULL
#>
#> $`8`
#> NULL
a %>% pmap("r.squared","sigma")
#> $call
#> NULL
#>
#> $terms
#> NULL
#>
#> $residuals
#> NULL
#>
#> $coefficients
#> NULL
#>
#> $aliased
#> NULL
#>
#> $sigma
#> NULL
#>
#> $df
#> NULL
#>
#> $r.squared
#> NULL
#>
#> $adj.r.squared
#> NULL
#>
#> $fstatistic
#> NULL
#>
#> $cov.unscaled
#> NULL
## There MUST be a more elegant way than:
dplyr::bind_rows(a %>% map_dbl("r.squared"),
a %>% map_dbl("sigma"))
#> # A tibble: 2 x 3
#> `4` `6` `8`
#> <dbl> <dbl> <dbl>
#> 1 0.5086326 0.4645102 0.4229655
#> 2 3.3322829 1.1652022 2.0240911
Run Code Online (Sandbox Code Playgroud)
如果帖子中的最后一个tbl是您要查找的输出,您可以考虑以下方法.
library(purrr)
a <- mtcars %>%
split(.$cyl) %>% # from base R
map(~ lm(mpg ~ wt, data = .)) %>%
map(summary)
a %>% map_df(~c(.$r.squared, .$sigma))
# A tibble: 2 x 3
`4` `6` `8`
<dbl> <dbl> <dbl>
1 0.5086326 0.4645102 0.4229655
2 3.3322829 1.1652022 2.0240911
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |