Analítica de Personas · Semestre otoño 2026 · Semana 1 · Prof. René Gempp
Quarto es un sistema de publicación que combina texto narrativo, código R y resultados (tablas, gráficos) en un solo documento. Escribes un archivo .qmd, haces click en "Render", y obtienes un reporte profesional en HTML, PDF o Word.
¿Por qué importa para people analytics? Porque el entregable nunca es "un script de R". El entregable es un reporte para alguien que no sabe R: el VP, el directorio, un gerente de línea. Quarto te permite producir ese reporte sin salir de RStudio, y si los datos cambian, solo vuelves a renderizar.
.R es para ti (análisis, exploración, pruebas). Un documento .qmd es para tu audiencia (reporte con interpretaciones, visualizaciones y recomendaciones). En el curso usamos ambos: el script para trabajar y el .qmd para entregar.
Todo documento Quarto tiene tres partes que se alternan:
Este patrón se repite tantas veces como necesites: texto → código → texto → código → ...
El YAML (las líneas entre ---) configura todo el documento. Es muy sensible a la indentación: cada nivel se indenta con exactamente 2 espacios.
---
title: "Diagnóstico de Fuerza Laboral — InnovaCo SpA"
subtitle: "Reporte para el VP de Personas"
author: "Tu nombre"
date: "2025-03-11"
format: # ← nivel 0
html: # ← nivel 1 (2 espacios)
theme: cosmo # ← nivel 2 (4 espacios)
toc: true # tabla de contenidos
toc-depth: 2 # hasta qué nivel de título
code-fold: true # código colapsado por defecto
code-summary: "Ver código" # texto del botón para expandir
number-sections: true # numerar secciones
execute:
echo: true # mostrar código en el output
warning: false # ocultar warnings de R
message: false # ocultar mensajes de R
---
| Opción | Qué hace | Valores |
|---|---|---|
theme | Estilo visual del HTML | cosmo, flatly, journal, lumen, sandstone |
toc | Tabla de contenidos automática | true / false |
toc-depth | Hasta qué nivel de título incluir en el TOC | 2 (incluye ## y ###), 3 |
code-fold | Código aparece colapsado (el lector puede expandirlo) | true / false |
echo | ¿Mostrar el código en el documento? | true / false |
warning | ¿Mostrar warnings de R? | true / false |
message | ¿Mostrar mensajes de R (ej: al cargar paquetes)? | true / false |
code-fold: true?
Porque el destinatario del reporte es un ejecutivo, no un programador. Con code-fold, el reporte muestra solo los resultados (tablas, gráficos, texto), pero el código queda disponible para quien quiera verificar cómo se hizo el análisis. Lo mejor de dos mundos.
html: tiene 2 espacios, theme: necesita 4 espacios. Si el documento no renderiza y el error menciona "YAML" o "parsing", revisa los espacios.
El texto fuera de los chunks de código se escribe en Markdown, un formato de texto simple que se convierte automáticamente a HTML con formato:
## Título de sección
### Subtítulo
Texto normal de un párrafo.
Texto en **negrita** y en *cursiva*.
- Primer punto
- Segundo punto
1. Paso uno
2. Paso dos
> Cita textual o destacado
[Enlace a Google](https://google.com)
`código_en_línea()`
Texto normal de un párrafo.
Texto en negrita y en cursiva.
Cita textual o destacado
código_en_línea()
Quarto tiene cajas especiales para destacar información. Se usan mucho en reportes ejecutivos:
::: {.callout-note}
## Hallazgo clave
La tasa de rotación en Soporte Técnico (35%)
duplica la del resto de la empresa.
:::
::: {.callout-warning}
## Señal de alerta
La satisfacción en Ventas cayó 8 puntos respecto
al período anterior.
:::
::: {.callout-tip}
## Recomendación
Se sugiere realizar entrevistas de salida
focalizadas en Soporte Técnico durante marzo.
:::
| Tipo | Color | Uso sugerido |
|---|---|---|
.callout-note | Azul | Información general, hallazgos |
.callout-tip | Verde | Recomendaciones, buenas prácticas |
.callout-warning | Amarillo | Precauciones, señales de alerta |
.callout-important | Rojo | Información crítica, urgente |
Los chunks son los bloques donde va el código R. Abren con ```{r} y cierran con ```. Todo lo que está entre esos delimitadores se ejecuta cuando renderizas el documento.
```{r}
#| label: mi-analisis
#| fig-cap: "Distribución de edad en InnovaCo"
#| fig-width: 8
#| fig-height: 4.5
ggplot(innovaco, aes(x = edad)) +
geom_histogram(binwidth = 3, fill = "#2C5F2D") +
theme_minimal()
```
Las líneas que empiezan con #| (hashpipe) son opciones del chunk. Controlan cómo se ejecuta y se muestra ese bloque específico.
| Opción | Qué hace | Valores comunes |
|---|---|---|
#| label: nombre | Nombre identificador del chunk (para referencia) | Texto sin espacios: headcount, fig-edad |
#| echo: false | Oculta el código, muestra solo el resultado | true (default) / false |
#| eval: false | Muestra el código pero NO lo ejecuta | true (default) / false |
#| warning: false | Oculta warnings de este chunk específico | true / false |
#| message: false | Oculta mensajes (ej: al cargar paquetes) | true / false |
#| fig-cap: "Texto" | Agrega un título debajo del gráfico | Texto entre comillas |
#| fig-width: 8 | Ancho del gráfico (pulgadas) | 6, 8, 10 |
#| fig-height: 4.5 | Alto del gráfico (pulgadas) | 4, 4.5, 6 |
execute: se aplican a todos los chunks. Las opciones con #| dentro de un chunk se aplican solo a ese chunk y sobreescriben las globales. Ejemplo: si en el YAML tienes echo: true pero en un chunk pones #| echo: false, ese chunk específico no mostrará código.
setupPor convención, el primer chunk de todo documento .qmd carga los paquetes y los datos. Se llama setup:
```{r}
#| label: setup
#| message: false
library(tidyverse)
innovaco <- read_csv("innovaco_empleados.csv")
```
tidyverse esté cargado en tu consola de RStudio no significa que esté cargado en el .qmd. Cada documento es independiente. El library(tidyverse) debe estar en el primer chunk del .qmd, siempre.
Nunca escribas los ```{r} a mano. Usa el atajo:
| Sistema | Atajo |
|---|---|
| Windows / Linux | Ctrl + Alt + I |
| Mac | Cmd + Option + I |
Esto inserta automáticamente un chunk completo con apertura y cierre. Solo tienes que escribir el código adentro.
| Acción | Atajo | Qué hace |
|---|---|---|
| Ejecutar línea actual | Ctrl + Enter | Ejecuta la línea donde está el cursor |
| Ejecutar chunk completo | Ctrl + Shift + Enter | Ejecuta todo el chunk actual |
| Ejecutar todos los chunks anteriores | Ctrl + Alt + P | Ejecuta desde el inicio hasta el chunk actual |
| Renderizar documento completo | Ctrl + Shift + K | Genera el HTML final |
Cuando renderizas un .qmd, Quarto busca los archivos (como el CSV) relativo a donde está el .qmd, no al working directory de RStudio. La forma más simple de evitar problemas:
Pon todo en la misma carpeta:
mi_proyecto/
├── clase01_reporte_vp.qmd # Tu documento Quarto
├── clase01_script.R # Tu script de trabajo
└── innovaco_empleados.csv # Los datos
Dentro del .qmd, la ruta es simplemente:
innovaco <- read_csv("innovaco_empleados.csv")
# Ruta absoluta:
read_csv("C:/Users/Juan/datos.csv")
# Archivo en otra carpeta:
read_csv("../Descargas/datos.csv")
# Mismo directorio que el .qmd:
read_csv("innovaco_empleados.csv")
# Subcarpeta dentro del proyecto:
read_csv("datos/innovaco_empleados.csv")
Puedes insertar resultados de R directamente dentro del texto narrativo usando la sintaxis `r expresión`. Esto es muy poderoso para reportes porque los números se actualizan automáticamente:
InnovaCo cuenta con `r nrow(innovaco)` empleados.
La edad promedio es de `r round(mean(innovaco$edad), 1)` años.
La tasa de rotación global alcanza el
`r scales::percent(mean(innovaco$rotacion == "Sí"), accuracy = 0.1)`.
En el HTML renderizado esto aparecería como:
InnovaCo cuenta con 1.200 empleados. La edad promedio es de 34.4 años. La tasa de rotación global alcanza el 27.2%.
Cuando haces click en Render (o Ctrl + Shift + K), Quarto:
.html en la misma carpeta que el .qmdsetup (que carga datos y paquetes) siempre va primero.
| # | Síntoma | Causa | Solución |
|---|---|---|---|
| 1 | Error de parsing al renderizar, menciona "YAML" | Indentación incorrecta en el encabezado YAML. Probablemente usaste tabs en vez de espacios, o la jerarquía no es consistente. | Revisa que cada nivel tenga exactamente 2 espacios más. Usa solo espacios, nunca tabs. |
| 2 | Chunk no se ejecuta, aparece como texto plano | Falta {r} en la apertura, o falta el ``` de cierre. |
Usa Ctrl+Alt+I para insertar chunks. Nunca escribas los backticks a mano. |
| 3 | 'archivo.csv' does not exist |
El CSV no está en la misma carpeta que el .qmd, o la ruta es incorrecta. | Pon el .csv en la misma carpeta que el .qmd. Usa ruta relativa: "innovaco_empleados.csv" |
| 4 | could not find function "count" |
No cargaste library(tidyverse) en el .qmd. Que esté cargado en la consola no basta. |
Agrega library(tidyverse) al primer chunk (setup). |
| 5 | object 'rotacion_depto' not found |
Usas un objeto que se crea más abajo en el documento, o en un chunk que no se ejecutó. | Mueve la creación del objeto antes de su uso. Los chunks se ejecutan de arriba hacia abajo. |
| 6 | El YAML o el Markdown dan error en la consola de R | Estás ejecutando código Quarto en la consola de R en vez de dentro del archivo .qmd. | El código Quarto solo funciona dentro del archivo .qmd. La consola es solo para código R puro. |
| 7 | Aparecen mensajes como ── Attaching core tidyverse packages ── en el reporte |
No silenciaste los mensajes de carga de paquetes. | En el YAML: message: false bajo execute:. O en el chunk setup: #| message: false |
Si tu .qmd no renderiza, sigue estos pasos en orden:
--- están completos? ¿La indentación es correcta?```{r} y cierran con ```?library(tidyverse) y read_csv()?| Lo que escribes | Lo que se ve |
|---|---|
# Título 1 | Título principal (rara vez se usa, el title: del YAML lo reemplaza) |
## Título 2 | Sección principal |
### Título 3 | Subsección |
**negrita** | negrita |
*cursiva* | cursiva |
`código` | código |
- item | ● item (lista con viñetas) |
1. paso | 1. paso (lista numerada) |
> cita | Bloque de cita |
[texto](url) | Hipervínculo |
--- | Línea horizontal de separación |
`r expresión` | Resultado de la expresión R (código en línea) |
| Acción | Windows / Linux | Mac |
|---|---|---|
| Insertar chunk | Ctrl + Alt + I | Cmd + Option + I |
| Ejecutar línea actual | Ctrl + Enter | Cmd + Enter |
| Ejecutar chunk completo | Ctrl + Shift + Enter | Cmd + Shift + Enter |
| Ejecutar chunks anteriores | Ctrl + Alt + P | Cmd + Option + P |
| Renderizar documento | Ctrl + Shift + K | Cmd + Shift + K |
Insertar pipe |> | Ctrl + Shift + M | Cmd + Shift + M |
Insertar asignación <- | Alt + - | Option + - |