2010-12-29 16 views
16

En ggplot2, ¿cómo me refiero a un nombre de variable con espacios?¿Cómo hacer referencia a un nombre de variable con espacios?

¿Por qué se rompen qplot() y ggplot() cuando se usan nombres de variables con comillas?

Por ejemplo, esto funciona:

qplot(x,y,data=a) 

Pero esto no es así:

qplot("x","y",data=a) 

Lo pregunto porque a menudo tengo matrices de datos con espacios en el nombre. Por ejemplo, "Ingresos del Estado". ggplot2 necesita marcos de datos; ok, puedo convertir. Así que me gustaría probar algo como:

qplot("State Income","State Ideology",data=as.data.frame(a.matrix)) 

Eso falla.

Mientras que en los gráficos de base R, lo haría:

plot(a.matrix[,"State Income"],a.matrix[,"State Ideology"]) 

que funcionaría.

¿Alguna idea?

+9

Try '' income'' estado - esas son invertidas – hadley

+0

Para fines de referencia, que reformuló la pregunta para indicar el verdadero problema. –

+6

Creo que el comentario de Hadley se rompió debido a los cambios en los comentarios de StackOverflow. Debería verse así: \ 'state income \ '. –

Respuesta

21

Respuesta: porque 'x' y 'y' se consideran un vector de caracteres de longitud uno, no un nombre de variable. Aquí descubres por qué no es inteligente usar nombres de variables con espacios en R. O cualquier otro lenguaje de programación para el caso.

Para refieren a los nombres de variables con espacios, puede utilizar cualquiera de las soluciones Hadleys

a.matrix <- matrix(rep(1:10,3),ncol=3) 
colnames(a.matrix) <- c("a name","another name","a third name") 

qplot(`a name`, `another name`,data=as.data.frame(a.matrix)) # backticks! 

o más formal

qplot(get('a name'), get('another name'),data=as.data.frame(a.matrix)) 

El último puede ser utilizado en construcciones donde se pasa el nombre de una variable como una cadena en, por ejemplo, una construcción de bucle:

for (i in c("another name","a third name")){ 
    print(qplot(get(i),get("a name"), 
     data=as.data.frame(a.matrix),xlab=i,ylab="a name")) 
    Sys.sleep(5) 
} 

Aún así, la mejor solución no es usar nombres de variables con espacios.

+0

Gracias; esto funciona muy bien, y la sugerencia de "obtener" y hacer bucles es clara. Mi única objeción es que los nombres con espacios, a pesar de ser más engorrosos para trabajar, a menudo son más legibles, y con frecuencia se pueden pasar al código LaTeX sin cambiar el nombre. – bshor

3

El uso de get no es más "formal", de hecho, yo diría lo contrario. Como dice la ayuda de R (help("`")), casi siempre puede usar un nombre de variable que contenga espacios, , siempre que se cite. (Normalmente, con un backtick, como ya se sugirió).

2

Algo similar se le preguntó en la lista de correo ggplot2 y Mehmet Gültaş vinculado a esta publicación. Otra forma de utilizar cadenas para construir su llamada ggplot es a través de la función aes_strings. Tenga en cuenta que todavía tiene que poner los puntos al revés dentro de las comillas para que funcionen las variables con espacios.

library(ggplot2) 

names(mtcars)[1] <- "em pi dzi" 

ggplot(mtcars, aes_string(x = "cyl", y = "`em pi dzi`")) + 
    theme_bw() + 
    geom_jitter() 
Cuestiones relacionadas