class: center, middle .linea-superior[] .linea-inferior[] <img src="imagenes/logo_portada2.png" width="200" /> ## Capacitación en R ## Introducción a Rmarkdown ### Enero 2021 --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Sesión 6: Introducción a RMarkdown -- <br/> .medium-par[Importancia de la reproducibilidad 🤖] <br/> <br/> -- .medium-par[¿Qué es RMarkdown?] <br/> <br/> -- .medium-par[Tipos de formatos de salida] <br/> <br/> -- .medium-par[Creando mi primer reporte con RMarkdown] <br/> <br/> --- background-image: url(https://the-turing-way.netlify.app/_images/reproducibility.jpg) background-size: contain --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- <br/> .center[.medium-par[¿Han escuchado el concepto de .pur[reproducibilidad]?🤔]] -- .center[.big-par[¿Qué entienden por .pur[reproducibilidad]?]] -- .center[.medium-par[¿En qué creen que puede aportar la .pur[reproducibilidad] en su trabajo cotidiano]?] -- .center[.big-par[🤔]] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- <br/> Que otra persona (o mi yo del futuro) pueda ejecutar mi .pur[código] con .pur[los mismos datos] llegando **al mismo resultado**. --  --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- <br/> <br/> .center[.big-par[**¿Qué puede salir mal?** ⚰️]] -- <br/> .center[ <img src= "https://media1.giphy.com/media/jM6JLt7xHkZxaeHwhG/200w.webp?cid=ecf05e478x4ytanztrx22si2y7ibrgekn371tgscimf4bemf&rid=200w.webp" width="400"/> ] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- <br/> <br/> .pull-left[ <br/> <br/> <img src = "https://media4.giphy.com/media/Q6rHMQaNbqsqBd8pVb/200w.webp?cid=ecf05e47coe8546mt2qzg63trkm1qmlbgzgt5kt10krdzvv5&rid=200w.webp" width="400" />] -- .pull-right[ - No sé si estoy usando los mismos datos - Rutas a archivos que son incorrectas - Aleatoriedad no reproducible - Comentarios escuetos en el código - Variables no localizadas (no estaban creadas en la rutina) - Diferentes versiones del *software* o de los paquetes ] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- ## Algunas soluciones: -- No sé si estoy usando los mismos datos 👉 .medium-par[.pur[script]] -- Rutas a archivos que son incorrectas 👉 .medium-par[.pur[RProject y protocolo IPO]] -- Aleatoriedad no reproducible 👉 .medium-par[.pur[set.seed()]], entre otros -- Comentarios escuetos en el código 👉 .medium-par[.pur[🧐 (estilo de código)]] -- Variables no localizadas (no creadas en la rutina) 👉 .medium-par[.pur[RMarkdown]] -- Diferentes versiones del *software* o de los paquetes 👉 .medium-par[.pur[🐳]] -- .center[.medium.par[De todas maneras, salvo el último punto, todo esto y más podría solucionarse usando .pur[RMarkdown]]] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- .medium-par[De Daniela Ballari, en LatinR]. -- + Recordar como se hizo lo que se hizo (yo del futuro y supervisión) -- + Facilita la detección de errores antes de publicar (si el código no corre es porque hay problemas) -- + Permite el control de versiones (volver al pasado) -- + Facilita la continuación del trabajo ante el recambio de personal -- + Permite la colaboración y transparencia del proyecto -- + Credibilidad de lo realizado -- + Evita malos entendidos, confusiones frente a revisión o solicitudes innecesarias (cualquier duda consulta el código) -- + Código puede reutilizarse o complejizarse para mejorar un procedimiento o una investigación --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Importancia de la reproducibilidad -- <br/> <br/> <br/> <br/> <br/> <img src =https://www.researchgate.net/profile/Arthur_Piazzi/publication/325910795/figure/fig2/AS:640119719620611@1529627842920/Reproducibility-Spectrum.png width="800"/> --- background-image: url(https://github.com/allisonhorst/stats-illustrations/raw/master/rstats-artwork/rmarkdown_wizards.png) background-size: contain --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- `R Markdown` .pur[provee de un marco] para generar documentos en el contexto del análisis de datos. En un único documento de `R Markdown` podemos: -- .pull-left[ Guardar y ejecutar código. Generar reportes de alta calidad que pueden ser compartidos fácilmente. Los documentos creados con `R Markdown` son completamente reproducibles. Generar presentaciones con **código** y **tablas**, **imágenes**, etc. (como las de este curso). ] .pull-right[  ] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- ## Cómo funciona Los archivos de `R Markdown` en general tienen 3 partes: -- (1). Un encabezado que permite configurar inicialmente el documento que vamos a escribir (**yaml**)  --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- (2). "Pedazos de código" (o en inglés, ***chunk codes***).  --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- (3). Los **cuerpos de texto** donde podemos hacer comentarios sin necesidad de usar "#"  --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- (4). **Énfasis** ``` *cursiva* **negrita** _cursiva_ __negrita__ ``` -- (5). **Encabezados** ``` # Capítulo ## Subcapítulo ### Subsubcapítulo ``` -- (6). **Lista desordenada:** ``` * Item 1 * Item 2 + Item 2a + Item 2b ``` -- (7). **Lista ordenada:** ``` 1. Item 1 2. Item 2 3. Item 3 + Item 3a + Item 3b ``` --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- (8). **Fragmentos de código R (Chunk)** El código R será evaluado e impreso  -- (9). **Código R en línea**  --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- (9). **Enlaces** Usar una dirección http simple o agregar un enlace a una frase: ``` http://ejemplo.com [frase visible](http://ejemplo.com) ``` -- (10). **Imagenes** Imágenes en la web o archivos locales en el mismo directorio: ```   ``` --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- Para generar el documento se puede utilizar el comando `render` o bien utilizar el botón `Knit` (Tejer). .center[  ] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # R Markdown -- ## Cómo funciona .middle[  ] -- `R Markdown` ofrece muchas posibilidades. Veremos mayormente cómo crear documentos en formato .pdf usando `R Markdown`. -- Una de las principales **desventajas** de RMarkdown es que toma bastante **tiempo**⏰🕰️ hacer un documento la primera vez que se usa. -- Y generalmente hay que **estudiar** un poco con google... --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Ahora manos a la obra 👐 -- .big-par[Vamos a crear un RMarkdown en distintos formatos.] -- .medium-par[html] -- .medium-par[html-presentación] -- .medium-par[PDF] -- .medium-par[WORD] --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Rmarkdown ## Configuración de los chunks -- <br/> Los chunks tienen muchos argumentos que permiten moldear el output a lo que deseamos. -- Existe un chunk llamado por defecto "setup". -- .discussion[ {r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) ] -- A través de este chunk es posible setear la configuración por defecto. -- Esto lo hacemos cuando vamos a utilizar mucho alguna configuración, .pur[para no repetirla en cada chunk]. -- Los mismos argumentos se pueden utilizar para ajustar cualquier chunk. --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Rmarkdown -- ## Principales argumentos de los chunks -- - include = FALSE/TRUE -- - echo = FALSE/TRUE -- - message = FALSE/TRUE -- - warning = FALSE/TRUE -- - error = FALSE/TRUE -- **nota:** el shortcut para generar chunks en RMarkdown es .medium-par[.pur[Ctrl+Alt+i]] -- Este shortcut realmente ahorra muuuchos pasos. -- Revisemos esta guía de funcionalidades de [RMarkdown](https://rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf?_ga=2.232725209.739649860.1603251660-1579346009.1585862093) --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Rmarkdown -- ## Algunos elementos a considerar al trabajar en Rmarkdown -- `knitr()` (tejer) es una función. Y las funciones requieren que todo lo que se necesite se encuentre dentro de su ámbito. Entonces: -- - La función setwd() no funciona dentro de RMarkdown. - Las librerías que necesiten deben estar cargadas en el script de Rmarkdown (**error habitual**). - Tanto las bases de datos como las variables a utilizar deben estar llamadas dentro el script de Rmarkdown. - Knitr() incluye la impresión de los resultados, por lo que no es necesario usar print(). - No usar View() en RMarkdown, porque en el output no mostrará nada. - Cada chunk puede tener o no tener un nombre. Si los deciden nombrar, los nombres NO DEBEN REPETIRSE (**error habitual**). --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Referencias .medium-par[Nada de esto sería posible sin:] - [Presentación de Daniela Ballari en LatinR 2020 ](https://www.youtube.com/watch?v=Hvrb2b7v93w) - [Guía para la reproducibilidad en investigación - The Turing Project](https://the-turing-way.netlify.app/welcome.html) - [Xaringan: Presentation Ninja, de Yihui Xie](https://github.com/yihui/xaringan). Para generar esta presentación con la plantilla ninja ⚔ - [R for Data Science, de Hadley Wickham, capítulo 14](https://r4ds.had.co.nz/) - [Advanced R, de Hadley Wickham](http://adv-r.had.co.nz/Introduction.html) - [Introduction to R, de Data Carpentry](https://datacarpentry.org/R-genomics/01-intro-to-R.html#functions) .medium-par[R for Data Science tiene una traducción al español realizada por la comunidad hispana de R:] - [R para ciencia de datos, de Hadley Wickham, capítulo 14](https://es.r4ds.hadley.nz/) --- background-image: url("imagenes/fondo2.PNG") background-size: contain; background-position: 100% 0% # Otras referencias -- ## Para inspirarnos y seguir aprendiendo -- - [Curso Ciencia Social Abierta / UChile](https://cienciasocialabierta.netlify.app/) - [Curso Reproductible Research / Universidad Johns Hopkins (Coursera)](https://www.coursera.org/learn/reproducible-research) - [Ejemplos de documentos en pdf, html, word, entre otros](https://rmarkdown.rstudio.com/gallery.html) - [Documental sobre Aaron Swartz](https://www.youtube.com/watch?v=VBkD04z-8V8) (1986-2013), activista involucrado en el desarrollo del lenguaje Markdown, Creative Commons, Open Library y Reddit. - [Rodríguez-Sánchez en #LatinR2020. Como escribir manuscritos reproducibles](https://www.youtube.com/watch?v=TKhV3w467RI&t=202s) - [Ballari en #LatinR2020. ¿Por qué es importante la reproducibilidad computacional?](https://www.youtube.com/watch?v=Hvrb2b7v93w) - [Healey, K. Guía de texto simple para personas simples en ciencias sociales](https://kieranhealy.org/files/papers/plain-person-text.pdf) - [Yihui. `R Markdown`: *The Definitive Guide*](https://bookdown.org/yihui/rmarkdown/) - [`R Markdown` *Cheatsheet*](https://www.rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf) - [The Turing Way](https://the-turing-way.netlify.app/welcome.html) --- class: center, middle .linea-superior[] .linea-inferior[] <img src="imagenes/logo_portada2.png" width="200" /> ## Capacitación en R ## Introducción a Rmarkdown ### Enero 2021