Las representaciones de ggplot en las secuencias de comandos no se muestran en Rstudio

Tengo un problema extraño con Rstudio: si un script llama a ggplot2 para mostrar un gráfico, usar Source para ejecutar el script no genera los gráficos. Si selecciono el guión completo con Ctrl+A , ejecuto la línea o selección actual ( Ctrl+Enter ), entonces la gráfica se muestra. Del mismo modo, escribir comandos de trazado en la consola produce resultados correctos.

Por ejemplo:

 library(ggplot2) p = ggplot(mtcars, aes(wt, mpg)) p + geom_point() 

Solo producirá salida si está pegada en la consola, no si proviene de fonts.

Hay otras preguntas sobre esto, pero ninguna es útil:

  • La función ggplot2 ggsave hace que el dispositivo de gráficos no muestre las gráficas, afirma falsamente que el problema está solucionado en las versiones más nuevas, pero no es así.
  • RStudio – ggplot no guardó el primer gráfico al imprimir y guardar varios diagtwigs en un guión se cerró como un duplicado, aunque no solo no es un duplicado, sino que la solución dev.off() no funciona (” Error in dev.off() : cannot shut down device 1 (the null device) “)

¿Cómo puedo hacer que Rstudio muestre diagtwigs cuando se origina un guión? Estoy usando Rstudio 0.98.1062 y R 3.1.1.

La solución es llamar explícitamente a print() en el objeto ggplot:

 library(ggplot2) p <- ggplot(mtcars, aes(wt, mpg)) p <- p + geom_point() print(p) 

ggplot función ggplot devuelve el objeto de la clase ggplot; ggplot2 funciona al sobrecargar print función de print para comportarse de manera diferente en los objetos de la clase ggplot; en lugar de imprimirlos en STDOUT, crea un gráfico.

Todo funciona bien en modo interactivo, porque R supone que la mayoría de los comandos se ejecutan a través de print() función print() . Esto es para nuestra conveniencia y nos permite escribir rnorm(1) y obtener cualquier salida visible. Cuando se utiliza el comando Ejecutar selección actual ( Ctrl+Enter ), RStudio se comporta como si cada línea seleccionada se escribiera en modo interactivo y se ejecutara. Puede verificarlo consultando su historial de comandos en el panel de la Console después de ejecutar algunas líneas seleccionadas.

Pero este modo conveniente se abandona cuando el archivo es leído por la source() . Como esta función está destinada a ejecutar scripts R (potencialmente largos y costosos desde el punto de vista informático), no es conveniente contaminar STDOUT con mensajes de baja prioridad. Es por eso que source() de forma predeterminada generará solo un mensaje de error. Si quieres algo más, tienes que pedirlo explícitamente.

aunque es una pregunta bastante antigua. Tuve el mismo problema y encontré una solución rápida, si desea usar el botón “fuente” en el cuadro de edición de R studio.

simplemente puede activar “fuente con eco” (Ctrl + Mayús + Entrar) y la gráfica se muestra como se esperaba