Sesión 9 R Markdown
R Markdown es una herramienta para crear documentos que combinan texto, código y resultados. Son totalmente reproducibles y generan documentos de diferentes formatos: PDF, Word, HTML, presentaciones y más.
Un archivo R Markdown es un archivo de texto plano que tiene la extensión .Rmd, en
RStudio podemos seleccionar File > New File > R Markdown
para generar un
machote de un archivo R Markdown.
Básicos de R Markdown
El siguiente es un archivo de tipo R Markdown, es un archivo de texto plano
con terminación .Rmd
:
---
title: "Ejemplo"
author: "Teresa O."
date: "7/20/2020"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## R Markdown
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
```{r cars}
summary(cars)
```
## Including Plots
You can also embed plots, for example:
```{r pressure, echo=FALSE}
plot(pressure)
```
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
Los archivos R Markdown contienen tres tipos de contenido:
Un encabezado YAML (opcional) rodeado de —
Bloques de código de R rodeado de ```.
Texto formateado con lenguaje Markdown (# Encabezado e _itálicas_).
Cuando abres un archivo .Rmd, obtienes una interfaz con el código y el output intercalados. Puedes ejecutar cada bloque de código haciendo clic el ícono de play, o línea por línea como en un script de R usual.
- Utiliza RStudio para crear un machote de un archivo R Markdown, selecciona tipo de salida HTML. Repite seleccionando PDF, ¿qué cambia en el archivo de texto .Rmd?
Cuando presionas Knit en RStudio, o con código puedes utilizar la función knit
knit("ejemplo.Rmd")
, se ejecutan todos los bloques de código y se genera un documento markdown (.md) que incluye el código y su output. El archivo markdown es procesado entonces por pandoc que crea el archivo terminado, y pandoc puede crear las diferentes
salidas (Word, PDF, HTML) a partir del mismo archivo markdown.
Markdown
Las secciones de texto de un archivo R Markdown utilizan el lenguaje Markdown, una colección simple de convenciones para dar formato a archivos de texto plano. La guía abajo, tomada de Hadley Wickham and Grolemund (2017), muestra como usar Markdown.
Formato de texto
------------------------------------------------------------
*cursiva* ó _cursiva_
**negrita** __negrita__
`code`
superscript^2^ y subscript~2~
Encabezados
------------------------------------------------------------
# Encabezado de primer nivel
## Encabezado de segundo nivel
### Encabezado de tercer nivel
Listas
------------------------------------------------------------
* Elemento 1 en lista no enumerada
* Elemento 2
* Elemento 2a
* Elemento 2b
1. Elemento 1 en lista enumerada
1. Elemento 2. La numeración se incrementa automáticamente en el output.
Enlaces e imágenes
------------------------------------------------------------
<http://ejemplo.com>
[texto del enlace](http://ejemplo.com)
![pie de página opcional](ruta/de/la/imagen.png)
Tablas
------------------------------------------------------------
Primer encabezado | Segundo encabezado
--------------------- | ---------------------
Contenido de la celda | Contenido de la celda
Contenido de la celda | Contenido de la celda
- Crea un documento R Markdown donde describas la ciudad en que naciste, debe incluir al menos:
- encabezados de primer y segundo nivel, 2) enlaces, 3) formato de letras negritas o cursivas
Bloques de código
Para agregar código que se ejecutará en un archivo R Markdown se necesita insertar un bloque de código, para ello podemos:
Usar el atajo
Cmd/Ctrl + Alt + I
El botón Insert en la barra de edición de RStudio.
Escribir manualmente las comillas y corchetes:
```{r}
y```
.
Por otra parte el atajo Cmd/Ctrl + Shift + Enter correrá todo el código del bloque.
En el archivo R Markdown que creaste en el ejercicio anterior agrega un bloque de código que filtre la informacion de educación del municipio en que naciste.
Agrega un bloque de código que genere una gráfica donde compares tu municipio con el resto de los de tu estado.
library(estcomp)
df_edu#> # A tibble: 7,371 × 16
#> state_c…¹ munic…² region state…³ state…⁴ munic…⁵ sex pop_15 no_sc…⁶ presc…⁷
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 01 001 01001 Aguasc… AGS Aguasc… Total 631064 2.66 0.173
#> 2 01 001 01001 Aguasc… AGS Aguasc… Homb… 301714 2.36 0.175
#> 3 01 001 01001 Aguasc… AGS Aguasc… Muje… 329350 2.94 0.172
#> 4 01 002 01002 Aguasc… AGS Asient… Total 31013 4.01 0.258
#> 5 01 002 01002 Aguasc… AGS Asient… Homb… 14991 4.39 0.294
#> 6 01 002 01002 Aguasc… AGS Asient… Muje… 16022 3.66 0.225
#> 7 01 003 01003 Aguasc… AGS Calvil… Total 38678 6.36 0.165
#> 8 01 003 01003 Aguasc… AGS Calvil… Homb… 18499 7.06 0.184
#> 9 01 003 01003 Aguasc… AGS Calvil… Muje… 20179 5.71 0.149
#> 10 01 004 01004 Aguasc… AGS Cosío Total 10478 3.68 0.439
#> # … with 7,361 more rows, 6 more variables: elementary <dbl>, secondary <dbl>,
#> # highschool <dbl>, higher_edu <dbl>, other <dbl>, schoolyrs <dbl>, and
#> # abbreviated variable names ¹state_code, ²municipio_code, ³state_name,
#> # ⁴state_abbr, ⁵municipio_name, ⁶no_school, ⁷preschool
#> # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Opciones de bloques de código
Los bloques de código pueden tener nombre y se puede pasar opciones a ellos.
Nombre del bloque: Se escribe después del identificador de tipo de bloque
```{r nombre-bloque}
y sirve para navegar con mayor facilidad los bloques, las gráficas producidas en los bloques tendrán nombres útiles, se puede conjuntar con el uso de caches cuando el código es costoso de ejecutar.Opciones: Los bloques de código se pueden personalizar con parámetros con opciones que se pasan en el encabezado del bloque:
```{r nombre-bloque, echo = FALSE, error = TRUE}
. Hay más de 60 opciones (lista completa aquí http://yihui.name/knitr/options/). Entre las usadas más frecuentemente están:eval = FALSE
el código no se evaluará. Y por consiguiente tampoco habrá resultados de ese bloque. Esta opción es útil cuando queremos mostrar código ejemplo o deshabilitar un bloque temporalmente.include = FALSE
evalúa el código pero no imprime el código ni los resultados.echo = FALSE
oculta el código. Esta opción se utiliza para generar reportes reproducibles pero en los que el código no es de interés para el lector.message = FALSE
owarning = FALSE
elimina los mensajes y alertas del reporte final, por ejemplo, quizá no queremos que se impriman los mensajes al cargar paquetes o unir tablas.results = 'hide'
esconde los resultados;fig.show = 'hide'
esconde las gráficas.error = TRUE
por defecto los reportes de R Markdown genera error y no se crean cuando hay fallas en el código, la opción deerror = TRUE
permite que el proceso siga ignorando los errores.fig.width = 7, fig.height = 3
se utilizan para ajustar el tamaño de las gráficas.
Opciones globales: En ocasiones buscamos modificar las opciones para todos los bloques de nuestro documento, por ejemplo, cuando queremos ocultar el código de todos los bloques, u ocultar todos los mensajes de alerta.
::opts_chunk$set(
knitrecho = FALSE,
warning = FALSE
)
- Agrega nombre a los bloques de código de tu documento R Markdown y experimenta con las opciones que acabamos de revisar.
Tablas
Por defecto, R Markdown imprime data frames
tal como se ven en la consola:
filter(df_edu, state_code == "09")
#> # A tibble: 48 × 16
#> state_c…¹ munic…² region state…³ state…⁴ munic…⁵ sex pop_15 no_sc…⁶ presc…⁷
#> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 09 010 09010 Ciudad… CDMX Álvaro… Total 597803 2.19 0.126
#> 2 09 010 09010 Ciudad… CDMX Álvaro… Homb… 281228 1.57 0.139
#> 3 09 010 09010 Ciudad… CDMX Álvaro… Muje… 316575 2.74 0.115
#> 4 09 002 09002 Ciudad… CDMX Azcapo… Total 327926 2.00 0.0884
#> 5 09 002 09002 Ciudad… CDMX Azcapo… Homb… 149785 1.21 0.0861
#> 6 09 002 09002 Ciudad… CDMX Azcapo… Muje… 178141 2.66 0.0904
#> 7 09 014 09014 Ciudad… CDMX Benito… Total 362779 0.716 0.0573
#> 8 09 014 09014 Ciudad… CDMX Benito… Homb… 164806 0.138 0.0947
#> 9 09 014 09014 Ciudad… CDMX Benito… Muje… 197973 1.20 0.0263
#> 10 09 003 09003 Ciudad… CDMX Coyoac… Total 506449 1.45 0.0827
#> # … with 38 more rows, 6 more variables: elementary <dbl>, secondary <dbl>,
#> # highschool <dbl>, higher_edu <dbl>, other <dbl>, schoolyrs <dbl>, and
#> # abbreviated variable names ¹state_code, ²municipio_code, ³state_name,
#> # ⁴state_abbr, ⁵municipio_name, ⁶no_school, ⁷preschool
#> # ℹ Use `print(n = ...)` to see more rows, and `colnames()` to see all variable names
Podemos darles formato adicional con la función kable()
del paquete knitr
.
library(knitr)
filter(df_edu, state_code == "09", sex == "Total") |>
select(municipio_name, sex, pop_15, schoolyrs) |>
kable()
municipio_name | sex | pop_15 | schoolyrs |
---|---|---|---|
Álvaro Obregón | Total | 597803 | 10.82800 |
Azcapotzalco | Total | 327926 | 11.17819 |
Benito Juárez | Total | 362779 | 13.81161 |
Coyoacán | Total | 506449 | 12.25350 |
Cuajimalpa de Morelos | Total | 154561 | 11.37112 |
Cuauhtémoc | Total | 446045 | 11.97258 |
Gustavo A. Madero | Total | 931274 | 10.70371 |
Iztacalco | Total | 315498 | 11.31946 |
Iztapalapa | Total | 1414880 | 10.20615 |
La Magdalena Contreras | Total | 189468 | 10.35696 |
Miguel Hidalgo | Total | 305043 | 12.95450 |
Milpa Alta | Total | 101038 | 9.36765 |
Tláhuac | Total | 278302 | 10.14577 |
Tlalpan | Total | 533682 | 11.22496 |
Venustiano Carranza | Total | 347026 | 11.12894 |
Xochimilco | Total | 317062 | 10.42979 |
- Agrega una tabla a tu reporte (puedes usar nuevos datos) y usa la función
kable()
para agregar formato a la tabla.
Código en el texto
En ocasiones deseamos incluir información de los datos directamente en un párrafo,
para esto usamos `r `
. Por ejemplo:
Tenemos una muestra de
`r nrow(sample_2006)`
casillas. En las cuales el PAN obtuvo el`r 100 * sum(sample_2006$pan) / sum(sample_2006$total)`
% de los votos
Cuando creamos el reporte los cálculos se insertan en el texto:
Tenemos una muestra de 7200 casillas. En las cuales el PAN obtuvo el 35.91703 % de los votos
Para insertar texto la función format()
resulta útil pues permite ajustar
el número de dígitos en la salida, y que no pase como arriba, también podemos
usarla poner comas y mejorar la lectura:
format(12.123893, digits = 3)
#> [1] "12.1"
format(3452345, big.mark = ",")
#> [1] "3,452,345"
- Agrega código en el texto de tu reporte.
Reportes con parámetros
Los documentos de R Markdown pueden incluir parámetros, esto resulta útil cuando quieres generar varios reportes con distintos valores de entrada, por ejemplo, un reporte por estado de la república, un reporte por trimestre, etc.
En este ejemplo queremos generar un reporte para cada estado:
---
output: html_document
params:
estado: "01"
---
```{r setup, include=FALSE}
library(tidyverse)
library(estcomp)
codigo_edo <- params$estado
df_edo <- df_edu %>%
filter(state_code == codigo_edo)
```
# Estado de `r df_edo$state_name[1]`
```{r plot_ggplot}
df_edu %>%
filter(state_code == codigo_edo, sex == "Total") %>%
ggplot(aes(x = pop_15, y = schoolyrs)) +
geom_point()
```
Como vemos en el ejemplo de arriba los parámetros se acceden como una lista
usando la notación params$nombre
.
Para generar documentos de R Markdown con parámetros podemos usar la opción Run with Parameters … en el menú del botón Knit, ó producir los reportes con código:
library(rmarkdown)
render("reporte_param.Rmd", params = list(estado = "01"))
Esta segunda opción suele ser más conveniente, tenemos un script desde el que
generamos los reportes. Por ejemplo, con la función walk()
:
parametros <- tibble(
codigo_edo = unique(df_edu$state_code),
archivo = stringr::str_c("reporte-edo-", codigo_edo, ".html")
)
walk2(parametros$codigo_edo, parametros$archivo,
~render(input = "rmarkdown/reporte_param.Rmd", params = list(estado = .x),
output_file = .y))
- Crea un script para generar reportes estatales.
9.0.1 Recursos
Revisa el acordeón de R Markdown en
Help > Cheatsheets > R Markdown Cheatsheet
Revisa la guía de referencia de R Markdown en
Help > Cheatsheets > R Markdown Reference Guide
El libro R Markdown definitive guide escrito por Yihui Xie, J. J. Allaire, Garrett Grolemund es una excelente referencia.
Visita la galería de ejemplos en https://rmarkdown.rstudio.com/gallery.html.