gpt4 book ai didi

r - 如何在 purrr map 函数中将字符串作为函数传递

转载 作者:行者123 更新时间:2023-12-01 11:19:04 25 4
gpt4 key购买 nike

所以根据purrr::map中的输入定义,.f参数可以是:

[...]If character or integer vector, e.g. "y", it is converted to an extractor function, function(x) x[["y"]]. To index deeply into a nested list, use multiple values; c("x", "y") is equivalent to z[["x"]][["y"]]. You can also set .null to set a default to use instead of NULL for absent components.

因此应该可以将字符的 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

最佳答案

如果您帖子中的最后一个 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

关于r - 如何在 purrr map 函数中将字符串作为函数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46347288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com