【发布时间】:2021-08-23 00:35:38
【问题描述】:
我正在尝试编写一个函数,该函数可以将一个或多个参数作为变量传递给 dplyr 函数。我想了解一般情况下如何做到这一点。 Programming with dplyr 似乎没有涵盖该问题,并且您可以在 Google 或小插图中找到的一些更具权威性的文档(即 ?`!!!`)似乎已经过时。下面我提供了一个示例,说明我想要得到什么以及我失败的地方:
df <- as_tibble(mtcars)
df %>% group_by(cyl, gear) %>% summarise(mpg = mean(mpg)) #This is the result I want from a function
testfunc <- function(variables) {
df %>% group_by({{variables}}) %>% summarise(mpg = mean(mpg))
}
testfunc(cyl) #It works for a single variable
testfunc(cyl, gear) #It fails for multiple variables
testfunc2 <- function(variables) { #Second attempt
variables <- enquos(variables)
df %>% group_by(!!variables) %>% summarise(mpg = mean(mpg))
}
testfunc2(cyl, gear) #Unused argument error
testfunc2(c(cyl, gear)) #Doesn't work
testfunc2(c("cyl", "gear")) #Doesn't work
一般来说,你是如何解决这个问题的?
谢谢!!
【问题讨论】:
-
您提供的链接确实涵盖了这一点。使用
testfunc <- function(...) {df %>% group_by(...) %>% summarise(mpg = mean(mpg))}。但是您需要决定如何传递变量。您不能期望字符值和符号的工作方式相同。您不能将字符值直接传递给group_by。 -
谢谢,你说得对,我错过了,就是这样。