Capítulo 7 Reportes con R Markdown
- En esta sección explicaré cómo usar R Markdown, si así lo deseas, puedes ver la clase que hice sobre este tema en este link.
- Su función principal es la generación de informes, documentos o presentaciones. Es una herramienta muy potente ya que permite escribir código en muchos lenguajes de programación a través de estructuras llamadas “chunks.”
- Soporta el lenguaje Markdown.
- Es posible escribir expresiones matemáticas entre signos de dólar ($ $) usando LaTeX. También acepta la opción de doble signo dólar ($ $ $ $).
7.1 La estructura YAML
- Esta entre tres guiones medios por arriba y abajo (“---”)
- Es la configuración inicial de R Markdown.
Algunos parámetros que pueden ir en la estructura YAML son:
title: Es para especificar el título del R Markdown (no confundir con nombre del archivo con extensión.Rmd)subtitle: Es para especificar el subtítulo del R Markdown.author: Acá se especifica le autor del R Markdown.date: En este parámetro se indica la fecha en que se está escribiendo el R Markdown.output: Este parámetro hay que especificarlo obligatoriamente, pues acá indicamos cuál es el formato del archivo de salida.
Ejemplos:
- Una estructura YAML con salida en formato html.
---
title: “Taller de Software Estadístico”
subtitle: “Módulo
3”
author: “CA FMAT & CEFMAT”
date: “17 de febrero”
output: html_document
---
Podemos usar el lenguaje html para personalizar el documento.
¡Les invitamos a que busquen el tema html que más les guste! En prettydoc y rmdformats.
- Una estructura YAML con salida en formato pdf:
---
title: “Informe coronavirus en chile”
author: “Comisión de
salud”
date: “17 de julio 2021”
output: pdf_document
---
Podemos usar todas las funciones de LaTeX en este caso, ¡Puede ser muy provechoso!
Les invitamos a encontrar más opciones de personalización acá.
7.2 Markdown
Es un lenguaje de marcado que facilita la escritura de texto a través de simples carácteres.
Resumen:
| Código | Resultado |
|---|---|
| # Texto | Texto |
| ## Texto | Texto |
| ### Texto | Texto |
| #### Texto | Texto |
| _cursiva_ | cursiva |
| __negrita__ | negrita |
| \(\text{[Google](http://www.google.cl)}\) | |
| `codigo` | codigo |
1. Texto 1 2. Texto 2 3. Texto 3 4. Texto 4 |
|
* Texto 1 * Texto 2 * Texto 3 * Texto 4 |
|
7.2.1 Tablas
- Se pueden hacer tablas rápidamente usando barras verticales (|) y guiones medios (-)
- Para entender mejor cómo crear tablas veamos el siguiente ejemplo:
Para crear la siguiente tabla:
| Edad | Nacimientos | Mujeres | TFR por 1000 |
|---|---|---|---|
| 20 | 20 | 100 | 200 |
| 21 | 25 | 100 | 250 |
| 22 | 30 | 100 | 300 |
| 23 | 35 | 100 | 350 |
| 24 | 40 | 100 | 400 |
| Total | 150 | 500 | 1500 |
| 20-24 | 150 | 500 | 300 |
Debemos usar el siguiente código.
| Edad | Nacimientos | Mujeres | TFR por 1000 |
|-------|-------------|---------|--------------|
| 20 | 20 | 100 | 200 |
| 21 | 25 | 100 | 250 |
| 22 | 30 | 100 | 300 |
| 23 | 35 | 100 | 350 |
| 24 | 40 | 100 | 400 |
| Total | 150 | 500 | 1500 |
| 20-24 | 150 | 500 | 300 |7.3 Chunks
- La siguiente estructura es un “chunk” de R.
```{r}
```
- Dentro podemos escribir código en en lenguaje que especifiquemos en la llave {}.
Esto es un chunk con código de Python:
```{python}
for i in range(3):
\(\ \ \ \ \) print(i)
```
- Podemos nombrar un chunk para trabajar con más orden:
```{r IMPORTAR DATOS}
data <- rio::import(“datos.csv”)
```
7.3.1 Parámetros de un chunk
Dentro de las llaves pueden ir los siguientes parámetros:
echo: Cuando el argumento es FALSE, muestra el output pero no el código.include: Cuando es FALSE, no muestra ni el código ni el output.result: Cuando es FALSE, muestra el código pero no el resultado.message: Cuando es FALSE, no muestra mensajes provocados por la ejecución del código.warning: Cuando es FALSE, no muestra advertencias provocadas por el código.fig.align: Puede recibir como argumentos a “center,” “right” y “left.”
Pueden ver más opciones en este enlace.
Ejemplo:
```{r GRAFICO 1, echo=FALSE, fig.align = “center”}
ggplot(iris) +
\(\ \ \ \ \) aes(Sepal.Length, Petal.Length) +
\(\ \ \ \ \) geom_point(color = “brown4”)
```
Mostrará en el output un gráfico centrado, pero no el código que lo produce.
7.3.2 El chunk “setup”
Al crear un archivo R Markdown, se creará un chunk por defecto, abajo de la estructura YAML, llamado “setup” y tendrá como parámetro
include=FALSE.Es muy importante, ya que incluye las configuraciones iniciales de los chunks.
Dentro de la función
knitr::opts_chunk$set, podemos escribir nuevos parámetros que se aplicarán a TODOS los chunks.
Ejemplo:
``` {r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
message = FALSE, warning = FALSE, fig.align = “center”)
```
Además, podemos agregar los packages que usaremos durante la utilización de R Markdown:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE,
message = FALSE, warning = FALSE, fig.align = “center,” comment = NA)
# Packages
require(tidyverse)
require(DT)
```
7.3.3 Chunks inline
- Son bastante útiles, nos permite usar un lenguaje de programación mientras escribimos.
- Su uso se debe hacer mediante acentos graves (` `)
- Debemos especificar el lenguaje que usaremos antes de usar código.
Ejemplo:
La media entre los números 2, 4 y 12 es ` r mean(c(2, 4, 12)) `.
Producirá:
La media entre los números 2, 4 y 12 es 6.
- Podemos llamar variables creadas anteriormente en el código. Ejemplo:
media_Petal.Length <- iris$Sepal.Length %>% meanLa media del largo de los pétalos de iris es ` r media_Petal.Length `.
La media del largo de los pétalos de iris es
5.8433.
7.4 Tablas desde R
- En html, la mejor opción es usar la función
reactabledel package `reactable``, ya que es una opción interactiva.
Ejemplo:
grupos_iris <- iris %>%
group_by(Species) %>%
summarize(max_Sepal.Length = max(Sepal.Length))
# require(DT)
grupos_iris %>%
reactable::reactable()- En formatos pdf, la mejor opción es usar la función
kabledel packageknitr.
Ejemplo
# require(knitr)
grupos_iris %>%
knitr::kable()| Species | max_Sepal.Length |
|---|---|
| setosa | 5.8 |
| versicolor | 7.0 |
| virginica | 7.9 |
Les invitamos a aprender más sobre tablas en el siguiente link.
7.5 Imágenes
Podemos cargar imágenes usando la función include_graphics del package
knitr.
knitr::include_graphics(here::here("images", "ejemplo.jpg"))
7.6 Reportes automáticos
- Se puede crear un “template,” e ir cambiando el argumento
params. paramses un parámetro de la estructura YAML.- Muy útil para la generación de reportes automáticos.
Ejemplo:
---
title: “Taller de Software Estadístico”
subtitle: “Módulo
3”
author: “CA FMAT & CEFMAT”
date: “17 de febrero”
output: html_document
params:
\(\ \ \)especie: “setosa”
---
Creemos un histograma para la variable Sepal.Length, para la especie
“setosa” de iris.
require(magrittr)
require(dplyr)
require(ggplot2)
iris_especie_Sepal.Length <- iris %>%
filter(Species == params$especie)
grafico_especie <- ggplot(iris_especie_Sepal.Length) +
aes(x = Sepal.Length) +
geom_histogram(color = "dodgerblue3", fill = "dodgerblue4", alpha = 0.7) +
labs(x = "Sepal Length", y = "Frecuencia",
title = paste("Histograma de Sepal Lenth para la especie", params$especie, sep = " ")) +
theme_bw()
grafico_especie %>%
plotly::ggplotly()7.7 Actividad
Genere un reporte automático en R Markdown (formato html) que describa la situación en enero de 2021 respecto al coronavirus en Argentina, Chile y Perú. ¡Use toda su imaginación!