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)}\) Google
`codigo` codigo

1. Texto 1
2. Texto 2
3. Texto 3
4. Texto 4
  1. Texto 1

  2. Texto 2

  3. Texto 3

  4. Texto 4


* Texto 1
* Texto 2
* Texto 3
* 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 %>% mean

La 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 reactable del 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 kable del package knitr.

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.
  • params es 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!