r ggplot2 knitr rstudio

r markdown include graphics



R knitr Markdown: Gráficos de salida dentro de For Loop (4)

Como complemento de la excelente respuesta de Hugo, creo que en 2016 también debe incluir un comando de print :

```{r run-numeric-md, include=FALSE} out = NULL for (i in c(1:num_vars)) { out = c(out, knit_child(''da-numeric.Rmd'')) } `r paste(out, collapse = ''/n'')` ```

Me gustaría crear un informe knitr automatizado que produzca histogramas para cada campo numérico dentro de mi marco de datos. Mi objetivo es hacer esto sin tener que especificar los campos reales (este conjunto de datos contiene más de 70 y también me gustaría reutilizar el script).

He intentado algunos enfoques diferentes:

  • guardando la trama en un objeto, p , y luego llamando a p después del ciclo
    • Esto solo traza la trama final
  • Crear una matriz de gráficos, PLOTS <- NULL , y PLOTS <- append(PLOTS, p) los gráficos dentro del bucle PLOTS <- append(PLOTS, p)
    • El acceso a estas parcelas fuera del ciclo no funcionó en absoluto
  • Incluso intentó guardar cada uno en un archivo .png , pero preferiría no tener que lidiar con la sobrecarga de guardar y luego volver a acceder a cada archivo

Me temo que las complejidades de los dispositivos de la trama se están escapando de mí.

Pregunta

¿Cómo puedo hacer que el siguiente fragmento genere cada gráfico dentro del ciclo del informe? Actualmente, lo mejor que puedo lograr es la producción de la trama final producida guardándola en un objeto y llamando a ese objeto fuera del ciclo.

Un fragmento de markdown usando knitr en RStudio:

```{r plotNumeric, echo=TRUE, fig.height=3} suppressPackageStartupMessages(library(ggplot2)) FIELDS <- names(df)[sapply(df, class)=="numeric"] for (field in FIELDS){ qplot(df[,field], main=field) } ```

Desde este punto, espero personalizar las tramas aún más.


Deseo agregar una nota rápida: de alguna manera busqué en Google la misma pregunta y entré a esta página. Ahora en 2018, simplemente use print() en el ciclo.

for (i in 1:n){ ... f <- ggplot(.......) print(f) }


Envuelva la qplot en print .

knitr lo hará por ti si el qplot está fuera de un bucle, pero (al menos la versión que tengo instalada) no detecta esto dentro del bucle (lo cual es consistente con el comportamiento de la línea de comando R).


Estoy usando archivos Rmd secundarios en reducción, también funciona en sweave.

en Rmd use following snippet:

```{r run-numeric-md, include=FALSE} out = NULL for (i in c(1:num_vars)) { out = c(out, knit_child(''da-numeric.Rmd'')) } ```

da-numeric.Rmd se ve así:

Variabele `r num_var_names[i]` ------------------------------------ Missing : `r sum(is.na(data[[num_var_names[i]]]))` Minimum value : `r min(na.omit(data[[num_var_names[i]]]))` Percentile 1 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2]` Percentile 99 : `r quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100]` Maximum value : `r max(na.omit(data[[num_var_names[i]]]))` ```{r results=''asis'', comment="" } warn_extreme_values=3 d1 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[2] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[1] d99 = quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[101] > warn_extreme_values*quantile(na.omit(data[[num_var_names[i]]]),probs = seq(0, 1, 0.01))[100] if(d1){cat(''Warning : Suspect extreme values in left tail'')} if(d99){cat(''Warning : Suspect extreme values in right tail'')} ``` ``` {r eval=TRUE, fig.width=6, fig.height=2} library(ggplot2) v <- num_var_names[i] hp <- ggplot(na.omit(data), aes_string(x=v)) + geom_histogram( colour="grey", fill="grey", binwidth=diff(range(na.omit(data[[v]]))/100)) hp + theme(axis.title.x = element_blank(),axis.text.x = element_text(size=10)) + theme(axis.title.y = element_blank(),axis.text.y = element_text(size=10)) ```

ver mi paquete datamineR en github https://github.com/hugokoopmans/dataMineR