4.1 Operador pipe (redirección)
El operador %>% (paquete magrittr) permite canalizar la salida de una función a la entrada de otra.
Por ejemplo, segundo(primero(datos)) se traduce en datos %>% primero %>% segundo, lo que facilita la lectura de operaciones al escribir las funciones de izquierda a derecha.
Desde la versión 4.1 de R está disponible un operador interno |> (aunque yo sigo prefiriendo %>%).
Por ejemplo:
# El fichero 'empleados.RData' contiene datos de empleados de un banco.
# Supongamos por ejemplo que estamos interesados en estudiar si hay
# discriminación por cuestión de sexo o raza.
load("datos/empleados.RData")
# NOTA: Cuidado con la codificación latin1 (no declarada)
# al abrir archivos creados en versiones anteriores de R < 4.2:
# load("datos/empleados.latin1.RData")
# Listamos las etiquetas
knitr::kable(attr(empleados, "variable.labels"), col.names = "Etiqueta")| Etiqueta | |
|---|---|
| id | Código de empleado |
| sexo | Sexo |
| fechnac | Fecha de nacimiento |
| educ | Nivel educativo (años) |
| catlab | Categoría laboral |
| salario | Salario actual |
| salini | Salario inicial |
| tiempemp | Meses desde el contrato |
| expprev | Experiencia previa (meses) |
| minoria | Clasificación étnica |
| sexoraza | Clasificación por sexo y raza |
# Eliminamos las etiquetas para que no molesten...
# attr(empleados, "variable.labels") <- NULL
empleados |> subset(catlab == "Directivo", catlab:sexoraza) |> summary()## catlab salario salini tiempemp
## Administrativo: 0 Min. : 34410 Min. :15750 Min. :64.00
## Seguridad : 0 1st Qu.: 51956 1st Qu.:23063 1st Qu.:73.00
## Directivo :84 Median : 60500 Median :28740 Median :81.00
## Mean : 63978 Mean :30258 Mean :81.15
## 3rd Qu.: 71281 3rd Qu.:34058 3rd Qu.:91.00
## Max. :135000 Max. :79980 Max. :98.00
## expprev minoria sexoraza
## Min. : 3.00 No:80 Blanca varón :70
## 1st Qu.: 19.75 Sí: 4 Blanca mujer : 4
## Median : 52.00 Minoría varón:10
## Mean : 77.62 Minoría mujer: 0
## 3rd Qu.:125.25
## Max. :285.00
Para que una función sea compatible con este tipo de operadores el primer parámetro debería ser siempre los datos.
Sin embargo, el operador %>% permite redirigir el resultado de la operación anterior a un parámetro distinto mediante un ..
Por ejemplo:
# ?"|>"
# empleados |> subset(catlab != "Seguridad") |> droplevels |>
# boxplot(salario ~ sexo*catlab, data = .) # ERROR
library(magrittr)
empleados %>% subset(catlab != "Seguridad") %>% droplevels() %>%
boxplot(salario ~ sexo*catlab, data = .)