2011-04-01 19 views
8

No entiendo bien esto.Objeto no encontrado error con ggplot2

Estos ejemplos están trabajando:

# Function with geom_density 

gr.den <- function(var.name) { 
    ggplot(results, aes(get(var.name), fill = name)) + 
    geom_density(alpha = 0.2) + 
    geom_vline(xintercept = tv[, var.name], color="red", size=1) + 
    xlab(var.name) 
} 

gr.den("sum.Empl") 

# Example with geom_point 

ggplot(results, aes(sum.All, sum.Empl)) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 

Entonces yo estoy tratando de crear una función similar usando geom_point:

gr.sc <- function(var.name.1, var.name.2) { 
    ggplot(results, aes(get(var.name.1), get(var.name.2))) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 
} 

gr.sc("sum.All", "sum.Empl") 

Y yo estoy recibiendo este error. ¿Por qué?

Error in get(var.name.1) : object 'var.name.1' not found 
+1

, por favor brinde un ejemplo reproducible. Parece que necesitamos los contenidos de 'results' y' tv' para ejecutar su código. Ejecute 'dput()' y pegue los resultados en sus preguntas. – Chase

Respuesta

18

Si va a utilizar aes dentro de una función, es mejor usar aes_string en su lugar.

gr.sc <- function(var.name.1, var.name.2) { 
    ggplot(results, aes_string(x = var.name.1, y = var.name.2)) + 
    geom_point(alpha = 1/5) + 
    opts(aspect.ratio = 1) + 
    facet_grid(. ~ name) 
} 

gr.sc("sum.All", "sum.Empl") 

HTH

+0

¡Muchas gracias! 'aes_string' ayuda mucho. Encontré un error también en la primera función 'gr.den' y lo resolví con' aes_string'. – djhurio

4

El error se produce porque get está buscando en el entorno de mal (es decir, no dentro de la trama de datos results). Podría especificar explícitamente el get(var.name.1, envir = results) pero sería un código feo y horrible. Es mucho mejor usar aes_string como Iselzer sugiere.

1

Me encontré con problemas similares a esto: https://groups.google.com/forum/#!topic/ggplot2/_kKP4NNu3bc donde aes_string no funciona.

Esto podría resolverse en versiones posteriores de ggplot2. Pero estoy usando una versión anterior de ggplot2 por razones de compatibilidad. Un truco rápido que funcionó para mí fue establecer los parámetros de función como variables globales, es decir,

gr.sc <- function(var.name.1, var.name.2) { 
    var.name.1 <<- var.name.1 
    ... 
    ggplot(... 
    ... 
} 
Cuestiones relacionadas