Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown INFORMES DINÁMICOS CON R Antonio Miñarro [email protected] Departament d’Estadı́stica A. Miñarro Informes Dinámicos 1 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 2 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 3 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos Datos Análisis Estadı́stico - Texto con el Informe A. Miñarro Informes Dinámicos 4 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos $ ' Datos Software 1 Análisis Estadı́stico - & % ' $ Software 2 Texto con el Informe & A. Miñarro % Informes Dinámicos 4 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Programación Literaria Paradigma de programación propuesto por Donald Knuth como alternativa al popular paradigma de programación estructurada A. Miñarro Informes Dinámicos 5 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Programación Literaria Paradigma de programación propuesto por Donald Knuth como alternativa al popular paradigma de programación estructurada Un artı́culo es una sucesión de texto y código A. Miñarro Informes Dinámicos 5 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Programación Literaria Paradigma de programación propuesto por Donald Knuth como alternativa al popular paradigma de programación estructurada Un artı́culo es una sucesión de texto y código El código se encuentra insertado en çhunks”. Se encarga de realizar el análisis y preparar las presentaciones (tablas y figuras) A. Miñarro Informes Dinámicos 5 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Programación Literaria Paradigma de programación propuesto por Donald Knuth como alternativa al popular paradigma de programación estructurada Un artı́culo es una sucesión de texto y código El código se encuentra insertado en çhunks”. Se encarga de realizar el análisis y preparar las presentaciones (tablas y figuras) El texto documenta y desarrolla las ideas del programador o analista A. Miñarro Informes Dinámicos 5 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos Datos Análisis Estadı́stico Texto con el Informe A. Miñarro Informes Dinámicos 6 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos $ ' Datos Análisis Estadı́stico Texto con el Informe & A. Miñarro % Informes Dinámicos 6 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos $ ' Datos Análisis Estadı́stico Texto con el Informe & % RMarkdown: R + knitr + Markdown Sweave: R + LATEX A. Miñarro RMarkdown Sweave Informes Dinámicos 6 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Escribiendo informes estadı́sticos $ ' Datos Análisis Estadı́stico Texto con el Informe & % RMarkdown: R + knitr + Markdown Sweave: R + LATEX RMarkdown Sweave El objetivo es conseguir informes dinámicos y reproducibles A. Miñarro Informes Dinámicos 6 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 7 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown ¿Qué es Sweave? Una herramienta que permite insertar código R en documentos LATEX A. Miñarro Informes Dinámicos 8 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown ¿Qué es Sweave? Una herramienta que permite insertar código R en documentos LATEX Se crea un fichero formado por instrucciones LATEX con trozos (chunks) de còdigo R A. Miñarro Informes Dinámicos 8 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown ¿Qué es Sweave? Una herramienta que permite insertar código R en documentos LATEX Se crea un fichero formado por instrucciones LATEX con trozos (chunks) de còdigo R El código se ejecuta al procesar el fichero A. Miñarro Informes Dinámicos 8 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown ¿Qué es Sweave? Una herramienta que permite insertar código R en documentos LATEX Se crea un fichero formado por instrucciones LATEX con trozos (chunks) de còdigo R El código se ejecuta al procesar el fichero Se genera un documento LATEX con el texto y los resultados y gráficas producidos por R A. Miñarro Informes Dinámicos 8 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown ¿Cómo se instala Sweave? Asumimos instalados R y LATEX No requiere instalación especı́fica Incluido en la distribución base de R a partir de la versión 1.5.0 No necesita ser cargado. Forma parte del package utils A. Miñarro Informes Dinámicos 9 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas LATEX es software libre bajo licencia LPPL A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas LATEX es software libre bajo licencia LPPL LATEX presupone una filosofı́a de trabajo diferente a la de los procesadores de texto habituales (conocidos como WYSIWYG) y se basa en comandos A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas LATEX es software libre bajo licencia LPPL LATEX presupone una filosofı́a de trabajo diferente a la de los procesadores de texto habituales (conocidos como WYSIWYG) y se basa en comandos Además de sus capacidades gráficas para representar ecuaciones, fórmulas complicadas o notación cientı́fica, permite estructurar fácilmente el documento (con capı́tulos, secciones, notas, bibliografı́a, ı́ndices analı́ticos, etc.). A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas LATEX es software libre bajo licencia LPPL LATEX presupone una filosofı́a de trabajo diferente a la de los procesadores de texto habituales (conocidos como WYSIWYG) y se basa en comandos Además de sus capacidades gráficas para representar ecuaciones, fórmulas complicadas o notación cientı́fica, permite estructurar fácilmente el documento (con capı́tulos, secciones, notas, bibliografı́a, ı́ndices analı́ticos, etc.). MiKTeX es una distribución TeX/LATEX para Microsoft Windows A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown LATEX y MiKTeX LATEX es un sistema de composición de textos, orientado especialmente a la creación de libros, documentos cientı́ficos y técnicos que contengan fórmulas matemáticas LATEX es software libre bajo licencia LPPL LATEX presupone una filosofı́a de trabajo diferente a la de los procesadores de texto habituales (conocidos como WYSIWYG) y se basa en comandos Además de sus capacidades gráficas para representar ecuaciones, fórmulas complicadas o notación cientı́fica, permite estructurar fácilmente el documento (con capı́tulos, secciones, notas, bibliografı́a, ı́ndices analı́ticos, etc.). MiKTeX es una distribución TeX/LATEX para Microsoft Windows La versión actual de MiKTeX es 2.9 y está disponible en http://miktex.org/ A. Miñarro Informes Dinámicos 10 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Descarga de MiKTeX La descartga de MikTeX puede obtenerse a partir de aquı́: A. Miñarro Informes Dinámicos 11 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” El documento contiene los comandos LATEX y los chunks de código R 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” El documento contiene los comandos LATEX y los chunks de código R El fichero se procesa desde dentro de R con la instrucción Sweave(”myfile.Rnw”) 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” El documento contiene los comandos LATEX y los chunks de código R El fichero se procesa desde dentro de R con la instrucción Sweave(”myfile.Rnw”) Se crea un fichero LATEX myfile.tex que se procesa con LATEX 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” El documento contiene los comandos LATEX y los chunks de código R El fichero se procesa desde dentro de R con la instrucción Sweave(”myfile.Rnw”) Se crea un fichero LATEX myfile.tex que se procesa con LATEX Por ejemplo (verificando que el fichero sweave.sty1 esté en el texmf path o en el directorio de trabajo) con el editor TeXworks o directamente con la consola con pdflatex myfile.tex 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento LATEX pero con extensión .Rnw por ejemplo ”myfile.Rnw” El documento contiene los comandos LATEX y los chunks de código R El fichero se procesa desde dentro de R con la instrucción Sweave(”myfile.Rnw”) Se crea un fichero LATEX myfile.tex que se procesa con LATEX Por ejemplo (verificando que el fichero sweave.sty1 esté en el texmf path o en el directorio de trabajo) con el editor TeXworks o directamente con la consola con pdflatex myfile.tex Una alternativa más cómoda es trabajar con un entorno que integre las aplicaciones R y LATEX. Por ejemplo RStudio 1 Puede encontrarse dentro de la carpeta R en share->texmf->tex->latex A. Miñarro Informes Dinámicos 12 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 13 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Vamos a ver a continuación: 1 El fichero original Example1.Rnw 2 El fichero resultante final Example1.pdf A. Miñarro Informes Dinámicos 14 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Texto del Ejemplo 1 \documentclass{article} \usepackage[latin1]{inputenc} \title{Ejemplo minimalista de Sweave} \author{Antonio Min\~arro} \begin{document} \maketitle En este ejemplo procesamos mínimamente unos datos y producimos unos resultados que insertamos en un documento \LaTeX{} <<>>= data(iris) anova.iris<-aov(Sepal.Length~Species,data=iris) resul<-anova(anova.iris) print(resul) @ Efectuado el anova sobre la variable \textbf{Sepal.Lenght} el estadístico F ha sido \Sexpr{round(resul$'F value'[1],digits=2)} con \Sexpr{resul$'Df'[1]} y \Sexpr{resul$'Df'[2]} grados de libertad. \end{document} A. Miñarro Informes Dinámicos 15 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo minimalista de Sweave Antonio Miñarro 1 de junio de 2013 En este ejemplo procesamos mı́nimamente unos datos y producimos unos resultados que insertamos en un documento LATEX > > > > data(iris) anova.iris<-aov(Sepal.Length~Species,data=iris) resul<-anova(anova.iris) print(resul) Analysis of Variance Table Response: Sepal.Length Df Sum Sq Mean Sq F value Pr(>F) Species 2 63.212 31.606 119.26 < 2.2e-16 *** Residuals 147 38.956 0.265 --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Efectuado el anova sobre la variable Sepal.Lenght el estadı́stico F ha sido 119.26 con 2 y 147 grados de libertad. A. Miñarro Informes Dinámicos 16 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? echo: TRUE, FALSE - Show S code? A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? echo: TRUE, FALSE - Show S code? term: TRUE, FALSE - Emulates R session? I.e., include whatever is printed to R console A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? echo: TRUE, FALSE - Show S code? term: TRUE, FALSE - Emulates R session? I.e., include whatever is printed to R console results: verbatim, tex, hide - What are we outputting? Chunks with ’tex’ will be treated as latex code A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? echo: TRUE, FALSE - Show S code? term: TRUE, FALSE - Emulates R session? I.e., include whatever is printed to R console results: verbatim, tex, hide - What are we outputting? Chunks with ’tex’ will be treated as latex code fig: TRUE, FALSE - Chunk produce graphics? NOTE: Only one plotting device per chunk! A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks label: user-specified - Specify name of chunk eval: TRUE, FALSE - Evaluate chunk? echo: TRUE, FALSE - Show S code? term: TRUE, FALSE - Emulates R session? I.e., include whatever is printed to R console results: verbatim, tex, hide - What are we outputting? Chunks with ’tex’ will be treated as latex code fig: TRUE, FALSE - Chunk produce graphics? NOTE: Only one plotting device per chunk! include: TRUE, FALSE - Automatically generate includegraphics statement A. Miñarro Informes Dinámicos 17 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Texto del Ejemplo 2 \documentclass{article} \usepackage[spanish]{babel} \usepackage[latin1]{inputenc} \addtolength{\topmargin}{-2cm} \addtolength{\textheight}{24cm} \title{Ejemplo menos minimalista de Sweave} \author{Antonio Miñarro} \begin{document} \maketitle En el primer chunk, que no queremos visible, generamos dos variables y ajustamos un modelo lineal. <<echo=F,results=hide>>= x<-rnorm(n=50,mean=10,sd=2) y<-1.5*x+10+rnorm(n=50,sd=0.5) lm.fit<-lm(y~x) @ En el segundo chunk hacemos los resultados del ajuste lineal visibles a \LaTeX{} <<echo=F,results=verbatim>>= print(summary(lm.fit)) @ Finalmente vamos a crear un gráfico de dispersión con la recta de regresión <<echo=F,fig=TRUE>>= plot(x,y) abline(lm.fit) @ El coeficiente de determinación es: $ r^2 = $ \Sexpr{round(cor(x,y)*100,digits=2)} \%. \end{document} A. Miñarro Informes Dinámicos 18 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo menos minimalista de Sweave Antonio Miñarro 1 de junio de 2013 En el primer chunk, que no queremos visible, generamos dos variables y ajustamos un modelo lineal. En el segundo chunk hacemos los resultados del ajuste lineal visibles a LATEX Call: lm(formula = y ~ x) Residuals: Min 1Q -1.27653 -0.34705 Median 0.07917 3Q 0.38163 Max 0.74146 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 9.30629 0.31419 29.62 <2e-16 *** x 1.56868 0.03025 51.85 <2e-16 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.4612 on 48 degrees of freedom Multiple R-squared: 0.9825, Adjusted R-squared: 0.9821 F-statistic: 2689 on 1 and 48 DF, p-value: < 2.2e-16 y 20 25 30 Finalmente vamos a crear un gráfico de dispersión con la recta de regresión 6 8 10 12 14 x El coeficiente de determinación es: r2 = 99.12 %. A. Miñarro Informes Dinámicos 19 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Modificación manual de las figuras Una alternativa es no producir automáticamente la orden \includegraphics Por ejemplo en nuestro código podrı́amos haber especificado <<figura1,echo=F,fig=TRUE,include=FALSE>>= plot(x,y) abline(lm.fit) @ \begin{center} \begin{figure}[h!] \centering \includegraphics[width=0.5\textwidth]{Example2b-figura1} \caption{Regresión lineal} \end{figure} A. Miñarro Informes Dinámicos 20 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo menos minimalista de Sweave Antonio Miñarro 1 de junio de 2013 En el primer chunk, que no queremos visible, generamos dos variables y ajustamos un modelo lineal. En el segundo chunk hacemos los resultados del ajuste lineal visibles a LATEX Call: lm(formula = y ~ x) Residuals: Min 1Q -1.28348 -0.37575 Median 0.06127 3Q 0.38705 Max 0.82651 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 10.1316 0.3074 32.96 <2e-16 *** x 1.4833 0.0289 51.33 <2e-16 *** --Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 0.5256 on 48 degrees of freedom Multiple R-squared: 0.9821, Adjusted R-squared: 0.9817 F-statistic: 2635 on 1 and 48 DF, p-value: < 2.2e-16 20 25 y 30 Finalmente vamos a crear un gráfico de dispersión con la recta de regresión 6 8 10 12 14 x Figura 1: Regresión lineal El coeficiente de determinación es: r2 = 99.1 %. A. Miñarro Informes Dinámicos 21 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Creación de tablas LATEX Una de las herramientas más utilizadas es la creación de tablas para LATEX a partir de objetos de R. Es necesario tener cargado el package xtable de R > library(xtable) En las siguientes imágenes mostraremos el código fuente y el resultado A. Miñarro Informes Dinámicos 22 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Texto del Ejemplo 3 \documentclass{article} \usepackage[spanish]{babel} \usepackage[latin1]{inputenc} \addtolength{\topmargin}{‐2cm} \addtolength{\textheight}{24cm} \title{Ejemplo con tablas \LaTeX{}} \author{Antonio Miñarro} \begin{document} \maketitle Simulamos dos variables cualitativas y creamos una tabla de contingencia <<echo=F,results=hide>>= x<‐sample(c('A','B','AB','O'),size=100,replace=TRUE) y<‐sample(c('red','brown','blonde'),size=100,replace=TRUE) tabla<‐table(x,y) @ En el segundo chunk cargamos el package y creamos y mostramos la tabla <<echo=F,results=tex>>= library(xtable) xtable(tabla,caption='Tabla de contingencia') @ \end{document} A. Miñarro Informes Dinámicos 23 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo con tablas LATEX Antonio Miñarro 17 de junio de 2013 Simulamos dos variables cualitativas y creamos una tabla de contingencia En el segundo chunk cargamos el package y creamos y mostramos la tabla A AB B O blonde 6 12 10 7 brown 10 6 5 7 red 11 6 10 10 Cuadro 1: Tabla de contingencia A. Miñarro Informes Dinámicos 24 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Gráficos en bucle <<fig=TRUE>> for (i in 1:4) plot(rnorm(100)+i) @ El código anterior no funciona porque Sweave permite únicamente un gráficos por cada chunk de tipo figura. La solución es insertar manualmente las órdenes que generan los ficheros con las imágenes y su inclusión en el fichero LATEX Solución para gráficos en bucle <<results=tex,echo=FALSE>>= for(i in 1:4){ fname <- paste("myfile", i, ".pdf", sep = "") pdf(file = fname, width = 6, height = 6) plot(rnorm(100)+i) dev.off() cat("\\includegraphics[width=5cm]{", fname, "}\n\n", sep = "") } @ A. Miñarro Informes Dinámicos 25 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo con gráficos en bucle LATEX Antonio Miñarro 17 de junio de 2013 2 1 −1 0 rnorm(100) + i 3 4 Repetimos cuatro veces la simulación de normales y su gráfica 0 20 40 60 80 100 60 80 100 60 80 100 60 80 100 3 2 −1 0 1 rnorm(100) + i 4 5 6 Index 0 20 40 3 2 0 1 rnorm(100) + i 4 5 Index 0 20 40 4 2 3 rnorm(100) + i 5 6 Index 0 20 40 Index A. Miñarro Informes Dinámicos 26 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Reaprovechamiento de chunks \documentclass{article} \usepackage[spanish]{babel} \usepackage[latin1]{inputenc} \addtolength{\topmargin}{‐2cm} \addtolength{\textheight}{24cm} \title{Ejemplo con tablas \LaTeX{}} \author{Antonio Miñarro} \begin{document} \SweaveOpts{concordance=TRUE} \maketitle Simulamos dos variables cualitativas y creamos una tabla de contingencia <<echo=FALSE>>= size=100 @ <<label=chunk1,echo=F,results=hide>>= x<‐sample(c('A','B','AB','O'),size=size,replace=TRUE) y<‐sample(c('red','brown','blonde'),size=size,replace=TRUE) tabla<‐table(x,y) @ En el segundo chunk cargamos el package y creamos y mostramos la tabla <<label=chunk2,echo=F,results=tex>>= library(xtable) xtable(tabla,caption='Tabla de contingencia') @ <<echo=F,results=tex>>= size=1000 <<chunk1>> <<chunk2>> @ \end{document} A. Miñarro Informes Dinámicos 27 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo con tablas LATEX Antonio Miñarro 17 de junio de 2013 Simulamos dos variables cualitativas y creamos una tabla de contingencia En el segundo chunk cargamos el package y creamos y mostramos la tabla A AB B O blonde 4 9 10 8 brown 9 11 12 12 red 5 5 8 7 Cuadro 1: Tabla de contingencia A AB B O blonde 83 96 84 86 brown 92 79 88 67 red 96 78 77 74 Cuadro 2: Tabla de contingencia A. Miñarro Informes Dinámicos 28 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 29 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown RMarkdown R Markdown es un formato que permite una fácil creación de documentos, presentaciones dinámicas y informes de R Combina la sintaxis de Markdown (lenguaje de marcado (markup language) sencillo) con trozos de código R incrustados que se ejecutan de forma que el resultado se puede incluir en el documento final Los documentos de RMarkdown son totalmente reproducibles (pueden regenerarse de forma automática cada vez que el código o los datos cambian) A. Miñarro Informes Dinámicos 30 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Requerimientos Una versión reciente de R Un editor de texto (por ejemplo el incorporado en RStudio) Algunos packages adicionales de R accesibles desde el CRAN (knitr,...) Conocimientos del lenguaje Markdown A. Miñarro Informes Dinámicos 31 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento RMarkdown con extensión .Rmd por ejemplo ”myfile.Rmd” A. Miñarro Informes Dinámicos 32 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento RMarkdown con extensión .Rmd por ejemplo ”myfile.Rmd” El documento contiene los tags de Markdown con el texto y los chunks de código R A. Miñarro Informes Dinámicos 32 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento RMarkdown con extensión .Rmd por ejemplo ”myfile.Rmd” El documento contiene los tags de Markdown con el texto y los chunks de código R knitr procesa y produce un documento Markdown .md. El proceso puede ejecutarse desde dentro de RStudio o con las instrucciones library(knitr) knit2html("myfile.Rmd") browseURL("myfile.html) A. Miñarro Informes Dinámicos 32 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del proceso Creamos el documento RMarkdown con extensión .Rmd por ejemplo ”myfile.Rmd” El documento contiene los tags de Markdown con el texto y los chunks de código R knitr procesa y produce un documento Markdown .md. El proceso puede ejecutarse desde dentro de RStudio o con las instrucciones library(knitr) knit2html("myfile.Rmd") browseURL("myfile.html) knitr convierte el documento Markdown en un documento HTML .html (por defecto) publicable o imprimible. También se pueden general documentos PDF o Word. A. Miñarro Informes Dinámicos 32 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejecución dentro de RStudio A. Miñarro Informes Dinámicos 33 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Esquema del tema 1 Introducción 2 ¿Qué es Sweave? 3 Ejemplos Sweave 4 RMarkdown 5 Ejemplos RMarkdown A. Miñarro Informes Dinámicos 34 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo 1 (fichero Ejemplo1.Rmd) ## Ejemplo minimalista de RMarkdown En este ejemplo procesamos mı́nimamente unos datos y producimos unos resultados que insertamos en un documento RMarkdown ```{r} # Código de R data(iris) anova.iris<-aov(Sepal.Length~Species,data=iris) resul<-anova(anova.iris) print(resul) ``` Efectuado el anova sobre la variable **Sepal.Lenght** el estadı́stico F ha sido `r round(resul$'F value'[1],digits=2)` con `r resul$'Df'[1]` y `r resul$'Df'[2]` grados de libertad. > library(knitr) > knit2html('Ejemplo1.Rmd') Veamos el resultado A. Miñarro Informes Dinámicos 35 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks name of the chunk A. Miñarro Informes Dinámicos 36 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks name of the chunk eval: (TRUE; logical) whether to evaluate the code chunk; it can also be a numeric vector to select which R expression(s) to evaluate, e.g. eval=c(1, 3, 4) or eval=-(4:5) A. Miñarro Informes Dinámicos 36 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks name of the chunk eval: (TRUE; logical) whether to evaluate the code chunk; it can also be a numeric vector to select which R expression(s) to evaluate, e.g. eval=c(1, 3, 4) or eval=-(4:5) echo: (TRUE; logical or numeric) whether to include R source code in the output file A. Miñarro Informes Dinámicos 36 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Opciones para los chunks name of the chunk eval: (TRUE; logical) whether to evaluate the code chunk; it can also be a numeric vector to select which R expression(s) to evaluate, e.g. eval=c(1, 3, 4) or eval=-(4:5) echo: (TRUE; logical or numeric) whether to include R source code in the output file results: markup, asis, hide - What are we outputting? Chunks with ’tex’ will be treated as latex code A. Miñarro Informes Dinámicos 36 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo 2: Gráficos (fichero Ejemplo2.Rmd) ## Ejemplo menos minimalista de RMarkdown ### Cálculo estadı́stico * En el primer chunk, que no queremos visible, generamos dos variables y ajustamos un modelo lineal. ```{r calculo,echo=F,results='hide'} x<-rnorm(n=50,mean=10,sd=2) y<-1.5*x+10+rnorm(n=50,sd=0.5) lm.fit<-lm(y~x) ``` * En el segundo chunk hacemos los resultados del ajuste lineal visibles a _RMarkdown_ ```{r resultado,echo=F,results='markup'} print(summary(lm.fit)) ``` ### Gráficos * Finalmente vamos a crear un gráfico de dispersión con la recta de regresión ```{r grafico,fig.height=4,dev='png'} plot(x,y) abline(lm.fit) ``` El **coeficiente de determinación** es: r^2 = `r round(cor(x,y)*100,digits=2)` %. > knit2html('Ejemplo2.Rmd') Veamos el resultado A. Miñarro Informes Dinámicos 37 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo 3: Gráficos (2) (fichero Ejemplo3.Rmd) ## Ejemplo con gráficos en bucle en RMarkdown Repetimos cuatro veces la simulación de normales y su gràfica ```{r bucles,include=TRUE,fig.path='figure/',fig.height=4} for ( i in 1:4) plot(rnorm(100)+i) ``` ```{r graf,include=FALSE,fig.path='figure/'} plot(rnorm(100)) ``` Ahora incrustamos la imagen "a mano" ![Imagen graf](figure/graf.png) > knit2html('Ejemplo3.Rmd') Veamos el resultado A. Miñarro Informes Dinámicos 38 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Creación de tablas con RMarkdown Una de las herramientas más utilizadas es la creación de tablas a partir de objetos de R. Es necesario tener cargado el package xtable de R > library(xtable) En las siguientes imágenes mostraremos el código fuente y el resultado A. Miñarro Informes Dinámicos 39 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo 4: Tablas (fichero Ejemplo4.Rmd) ## Creación de tablas en RMarkdown Simulamos dos variables cualitativas y creamos una tabla de contingencia ```{r,results='hide',echo=FALSE} x<-sample(c('A','B','AB','O'),size=100,replace=TRUE) y<-sample(c('red','brown','blonde'),size=100,replace=TRUE) tabla<-table(x,y) ``` En el segundo chunk cargamos el package y creamos y mostramos la tabla ```{r tabla,results='asis'} library(xtable) xt<-xtable(tabla,caption='Tabla de contingencia') print(xt,type='html') ``` También podemos crear nuestras propias tablas *a mano* Calificación | Número --- | :---: Sobresaliente | 2 Notable | 15 Aprobado | 12 Suspenso | 8 **Resultado de las calificaciones** > knit2html('Ejemplo4.Rmd') Veamos el resultado A. Miñarro Informes Dinámicos 40 / 41 Introducción ¿Qué es Sweave? Ejemplos Sweave RMarkdown Ejemplos RMarkdown Ejemplo 5: Links (fichero Ejemplo5.Rmd) ## Información adicional sobre Markdown Podemos encontrar más información en los siguientes enlaces [Markdown documentation](http://daringfireball.net/projects/markdown/syntax) [Markdown en la Wikipedia](http://en.wikipedia.org/wiki/Markdown) Y como siempre nuestro amigo ![Foo](http://www.google.com.au/images/nav_logo7.png) > knit2html('Ejemplo5.Rmd') Veamos el resultado A. Miñarro Informes Dinámicos 41 / 41