我正在尝试围绕ggplot编写包装函数,但在取消引用函数参数时却不断出现错误:
Error in !enquo(x) : invalid argument type
我已经重新阅读了dplyr编程指南,并认为我理解了它,并且以前在使用dplyr动词(例如group_by和mutate)实现功能时使用过tidyeval。这把我带到ggplot documentation for aes,在这里我找到了这个例子:
scatter_by <- function(data, x, y) {
ggplot(data) + geom_point(aes(!!enquo(x), !!enquo(y)))
}
scatter_by(mtcars, disp, drat)
当我在RStudio 1.1.383中运行它时,出现错误:
Error in !enquo(x) : invalid argument type
我正在使用ggplot2 2.2.1版和dplyr 0.7.4
我尝试使用rlang :: UQ(enquo(x))代替!!但我仍然遇到错误。
答案 0 :(得分:1)
您可以使用quo_name
和scatter_by <- function(data, x, y) {
ggplot(data) +
geom_point(aes_string(x= quo_name(enquo(x)), y=quo_name(enquo(y))))
}
scatter_by(mtcars, disp, drat)
。
{{1}}
有关此问题的讨论颇多:How to use dplyr's enquo and quo_name in a function with tidyr and ggplot2