6

I am using gapminder and trying to write a simple function showing graphs of lifeExp against gdpPercap. However, when I put the arguments in the function, the arguments are not recognised.

I have tried several answers, with no results yet.

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

When I run plotting (gampinder, lifeExp, gdpPercap) to be used as input, xx and yy, the result is

"Error in FUN(X[[i]], ...) : object 'gdpPercap' not found"`

This is where I am stuck and gdpPercap is there but not found by the code! Could you please help.

Ronak Shah
  • 355,584
  • 18
  • 123
  • 178
Rassoul
  • 61
  • 3

1 Answers1

9

You need to use tidy evaluation inside aes(). Either .data[[ ]] or {{ }} (curly curly) would work. See also this answer and Tidy evaluation section in Hadley Wickham's Advanced R book.

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)

Created on 2019-11-09 by the reprex package (v0.3.0)

Tung
  • 23,290
  • 6
  • 81
  • 97
  • 2
    @Rassoul if this answer solves your question, kindly accept it by checking the tick next to the up/downvote buttons. This way, Tung gets rep-points and the answer is not labelled as unsolved anymore – tjebo Nov 10 '19 at 10:24