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
::kable(attr(empleados, "variable.labels"), col.names = "Etiqueta") knitr
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
|> subset(catlab == "Directivo", catlab:sexoraza) |> summary() empleados
## 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)
%>% subset(catlab != "Seguridad") %>% droplevels() %>%
empleados boxplot(salario ~ sexo*catlab, data = .)