gpt4 book ai didi

r - 使用 invoke_map 将变量名作为参数传递

转载 作者:行者123 更新时间:2023-12-04 10:35:24 26 4
gpt4 key购买 nike

我想用 invoke_map调用函数列表。我有一组变量名,我想将它们用作每个函数的参数。最终变量名将用于 group_by .

下面是一个例子:

library(dplyr)
library(purrr)
first_fun <- function(...){
by_group = quos(...)
mtcars %>%
group_by(!!!by_group) %>%
count()
}

second_fun <- function(...){
by_group = quos(...)
mtcars %>%
group_by(!!!by_group) %>%
summarise(avg_wt = mean(wt))
}

first_fun(mpg, cyl) # works
second_fun(mpg, cyl) # works

both_funs <- list(first_fun, second_fun)

both_funs %>%
invoke_map(mpg, cyl) # What do I do here?

我尝试了各种尝试将变量名放在引号中, enquo他们,使用 vars , 引用 .data$mpg等,但我有点在黑暗中刺伤。

最佳答案

问题不在于您使用了点,而在于您使用了名称以及何时 map2_impl被称为这些参数被评估。

试试这个并探索环境:

debugonce(map2)
both_funs %>% invoke_map("mpg", "cyl")

另一方面,这有效:
first_fun2 <- function(...){
mtcars %>%
{do.call(group_by_,list(.,unlist(list(...))))} %>%
count()
}

second_fun2 <- function(...){
mtcars %>%
{do.call(group_by_,list(.,unlist(list(...))))} %>%
summarise(avg_wt = mean(wt))
}

both_funs2 <- list(first_fun2, second_fun2)
both_funs2 %>% invoke_map("mpg", "cyl")

# [[1]]
# # A tibble: 25 x 2
# # Groups: mpg [25]
# mpg n
# <dbl> <int>
# 1 10.4 2
# 2 13.3 1
# 3 14.3 1
# 4 14.7 1
# 5 15.0 1
# 6 15.2 2
# 7 15.5 1
# 8 15.8 1
# 9 16.4 1
# 10 17.3 1
# # ... with 15 more rows
#
# [[2]]
# # A tibble: 25 x 2
# mpg avg_wt
# <dbl> <dbl>
# 1 10.4 5.3370
# 2 13.3 3.8400
# 3 14.3 3.5700
# 4 14.7 5.3450
# 5 15.0 3.5700
# 6 15.2 3.6075
# 7 15.5 3.5200
# 8 15.8 3.1700
# 9 16.4 4.0700
# 10 17.3 3.7300
# # ... with 15 more rows

关于r - 使用 invoke_map 将变量名作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302222/

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