我试图在本地函数中使用dplyr的group_by,例如:
testFunction <- function(df, x) { df %>% group_by(x) %>% summarize(mean.Petal.Width = mean(Petal.Width)) } testFunction(iris, Species)
我得到一个错误“...未知变量分组依据:x”我尝试了group_by_,它给了我整个数据集的摘要 . 有人知道如何解决这个问题吗?
提前致谢!
这是使用 dplyr 的新 enquo 的一种方法,其中 enquo 获取字符串并转换为 quosure ,通过在 group_by , mutate , summarise 等中取消引用( UQ 或 !! )进行评估 .
dplyr
enquo
quosure
group_by
mutate
summarise
UQ
!!
library(dplyr) testFunction <- function(df, x) { x <- enquo(x) df %>% group_by(!! x) %>% summarize(mean.Petal.Width = mean(Petal.Width)) } testFunction(iris, Species) # A tibble: 3 x 2 # Species mean.Petal.Width # <fctr> <dbl> #1 setosa 0.246 #2 versicolor 1.326 #3 virginica 2.026
我让它像这样工作:
testFunction <- function(df, x) { df %>% group_by(get(x)) %>% summarize(mean.Petal.Width = mean(Petal.Width)) } testFunction(iris,"Species")
我在 testFunction(iris,...) 中将 x 更改为 get(x) ,将 Species 更改为 "Species" .
testFunction(iris,...)
x
get(x)
Species
"Species"
2 回答
这是使用
dplyr
的新enquo
的一种方法,其中enquo
获取字符串并转换为quosure
,通过在group_by
,mutate
,summarise
等中取消引用(UQ
或!!
)进行评估 .我让它像这样工作:
我在
testFunction(iris,...)
中将x
更改为get(x)
,将Species
更改为"Species"
.