我想编写一个在内部使用 dplyr 的函数,并将变量名作为字符串提供。不幸的是 dplyr-s 对 NSE 的使用使它变得相当复杂。来自 Programming with dplyr我得到以下示例
my_summarise <- function(df, var) {
var <- enquo(var)
df %>%
group_by(!!var) %>%
summarise(a = mean(a))
}
my_summarise(df, g1)
但是,我想写函数 where 而不是
g1
我可以提供"g1"
我无法理解如何做到这一点。
最佳答案
dplyr >= 1.0
使用双大括号和 cross 函数的组合:
my_summarise2 <- function(df, group_var) {
df %>% group_by(across({{ group_var }})) %>%
summarise(mpg = mean(mpg))
}
my_summarise2(mtcars, "cyl")
# A tibble: 3 x 2
# cyl mpg
# <dbl> <dbl>
# 1 4 26.7
# 2 6 19.7
# 3 8 15.1
# same result as above, passing cyl without quotes
my_summarise(mtcars, cyl)
dplyr < 1.0 据我所知,你可以使用
as.name
或 sym
(来自 rlang
包 - 我不知道 dplyr
最终是否会导入它):library(dplyr)
my_summarise <- function(df, var) {
var <- rlang::sym(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
或者my_summarise <- function(df, var) {
var <- as.name(var)
df %>%
group_by(!!var) %>%
summarise(mpg = mean(mpg))
}
my_summarise(mtcars, "cyl")
# # A tibble: 3 × 2
# cyl mpg
# <dbl> <dbl>
# 1 4 26.66364
# 2 6 19.74286
# 3 8 15.10000
关于r - 使用字符串作为输入使用 dplyr 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44121728/