为什么ggplot文档中的这个aes tidyeval示例会引发错误?

时间:2018-06-20 08:48:06

标签: r ggplot2 dplyr

我正在尝试围绕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))代替!!但我仍然遇到错误。

1 个答案:

答案 0 :(得分:1)

您可以使用quo_namescatter_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