如何将ggplot的aes参数传递给函数

8
我正在使用Gapminder并尝试编写一个简单的函数,显示lifeExpgdpPercap之间的图形。然而,当我将参数放入函数中时,参数无法被识别。
我已经尝试了几个答案,但仍未得到结果。
plotting <- function (input, xx, yy){
  library (ggplot2)
  library (gapminder)
  ggplot (input, aes (xx, yy, size = pop, color = country)) + geom_point(show.legend = FALSE) 
}  

当我运行plotting(gampinder, lifeExp, gdpPercap)用作输入的xxyy时,结果是:

"FUN(X[[i]],...)中的错误:对象'gdpPercap'未找到"

这就是我卡住的地方,gdpPercap是存在的,但代码找不到它!请问你能帮忙吗?
1个回答

16
你需要在aes()内使用花括号花括号或者.data[[ ]]或者{{ }}整洁评估。请参阅此答案以及Hadley Wickham的高级R书中整洁评估部分
library(gapminder)
library(rlang)
library(ggplot2)

plotting <- function(input, xx, yy) {
  ggplot(input, aes(.data[[xx]], .data[[yy]], size = pop, color = country)) +
    geom_point(show.legend = FALSE)
}

plotting(gapminder, "lifeExp", "gdpPercap")

plotting2 <- function(input, xx, yy) {
  ggplot(input, aes({{xx}}, {{yy}}, size = pop, color = country)) +
    geom_point(show.legend = FALSE)
}

plotting2(gapminder, lifeExp, gdpPercap)

由reprex包(v0.3.0)于2019-11-09创建


3
如果这个答案解决了你的问题,请在赞成/反对按钮旁边勾选打钩来接受它。这样,Tung 就会得到声望点数,而答案也不会再被标记为未解决。 - tjebo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接