2012-07-11 8 views
6

Estoy intentando usar la función R-Markdown en R Studio, donde estaba tratando de imprimir trazados que se generan dentro de una función. Este es un ejemplo básico y descuidado de lo que estoy tratando de hacer.Imprimir trazados generados en una función utilizando R Markdown en RStudio

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 

    plot(data[,1],data[,2]) 
    plot(data[,1],data[,3]) 
} 

for (i in 1:10){ 
t1 <- rbind(i,ex(dat)) 
} 
t1 
``` 

Los probar este código, por favor asegúrese de guardarlo como archivo ".RMD" y ejecute el knithtml() en la barra de herramientas rstudio. Este código anterior funciona absolutamente bien con el tipo de salida html que deseo. Sin embargo, cuando reemplazo la función de trazado base por código basado en ggplot, no puedo obtener knithtml() para producir la salida ggplot de los 10 gráficos que obtuve como antes. El código de la gráfica base anterior ahora se reemplazó por el siguiente código

p1 <- ggplot(data=data, aes(x=data[,1],y=data[,2])) 
    p1 <- p1+geom_point() 
    p1 

Me falta algo muy simple aquí.

VJ

+0

Qué pasa si usted hizo una parcela facetas y unida que? –

+1

¡No! Mientras esté dentro de la función, no se está imprimiendo. Además, acabo de probar que qplot() produce el resultado deseado mientras que ggplot no lo hace. ¿No puedo imprimir un objeto ggplot generado dentro de una función, fuera de otra forma que no sea usar ggsave() para guardarlo como un pdf, p. Ej. –

+1

Dentro de la declaración 'for' o en una función, necesita' print' ggplot2 object explícitamente, por lo tanto intente 'print (p1)'. – kohske

Respuesta

5

Hay dos problemas en su código:

  1. ggplot no reconoce los datos x y datos de y, dispensada funciona dentro del entorno de datos. Debe darle los nombres de las columnas directamente.
  2. El código en su bucle no tiene sentido. No se puede mezclar un gráfico con un índice ... (la razón por la que funciona con el trazado base es a través de un efecto secundario) Lo he reemplazado con el comando de trazado simple.

El siguiente trabajo:

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 
    p1 <- ggplot(data=data, aes(x=x,y=y)) 
    p1 <- p1+geom_point() 
    return(p1) 
} 

for (i in 1:2){ 
plot(ex(dat)) 
} 

``` 
+0

Gracias por la corrección. La única razón por la que tengo un índice con la función de trazado es devolver un objeto diferente de una función (como una tabla de resumen) junto con generar los trazados. Estoy seguro de que hay mejores formas de hacerlo, pero esto pareció funcionar para mí. Además, me pregunto por qué R no se quejaría de la necesidad de las variables requeridas (x, y) cuando usa el comando plot() en el ciclo for. Lo intenté con la impresión y funcionó bien. Gracias de todos modos. –

Cuestiones relacionadas