Tyler Rinker Tyler Rinker - 1 month ago 8
R Question

pass character strings to ggplot2 within a function

Often I use ggplot2 in my work and build wrapper functions to speed up my work flow. The use of the non-standard evaluation (NSE)

forces me to use the actual variable names rather than passing character strings. So I copy and rename dataframes and variable names to appease ggplot2. There's got to be a better way. How can I make ggplot2 accept unknown dataframes and column names via a function wrapper without replicating the dataframe and using generic column names?

This works:

ggplot(mtcars, aes(x=mpg, y=hp)) +
geom_point()


This does not:

FUN <- function(dat, x, y) {
ggplot(dat, aes(x = x, y = y)) +
geom_point()
}

FUN(mtcars, "mpg", "hp")

Answer Source

There's the aes_string function, that I don't really see given prominence, which does exactly this:

FUN <- function(dat, x, y) {
    ggplot(dat, aes_string(x = x, y = y)) +
        geom_point()
}

FUN(mtcars, "mpg", "hp")