Una breve explicación sobre el pipe operator en R

Una breve explicación sobre el pipe operator en R

Este post intenta servir como una breve nota explicativa de qué es el pipe operator en R, por qué usarlo y, sobre todo, cuándo usarlo.

¿Qué es el pipe operator? Es un operador que forma parte del paquete magrittr, y su símbolo es %>%, este permite “encadenar” operaciones en el sentido que el resultado de una operación anterior se convierta en el input de la siguiente operación.

Por ejemplo, podríamos hacer lo siguiente:

  1. Crear un vector con números consecutivos desde el 1 hasta el 10
  2. Tomar el logaritmo natural de cada uno de esos números
  3. Sacar el promedio de ese vector
  4. Tomarle la raíz cuadrada

Hay muchas alternativas para ello, podríamos, por ejemplo ir creando un objeto por cada paso:

x <-  1:10
logx <- log(x)
meanlogx <- mean(logx)
sqrt(meanlogx)
## [1] 1.229

Podríamos hacerlo en una sola línea anidando todas las funciones…

sqrt(mean(log(1:10)))
## [1] 1.229

… donde la lectura natural de izquierda a derecha sería leer de forma invertida los pasos del ejemplo, es decir, sería algo como: aplicamos la raíz cuadrada a la media del logaritmo natural de los valores consecutivos desde el 1 hasta el 10. Si bien se entiende, no es una lectura natural puesto que estamos invirtiendo el orden, ya que empezamos a leer desde el final hasta el inicio.

En este contexto es donde interviene el pipe operator y la respuesta a la pregunta ¿por qué usarlo? se evidencia en la facilidad de lectura del código que se acopla con las instrucciones y da una conciliación natural entre el código y el lenguaje natural. Es decir, que las cuatro instrucciones anteriores se pueden ejecutar “encadenando” los pasos, ya que cada paso toma el resultado del paso inmediato anterior, así podríamos escribir:

library(magrittr)
1:10 %>% 
  log() %>% 
  mean() %>% 
  sqrt()
## [1] 1.229

Este código podría leerse de la siguiente manera:

  1. primero creo un vector de números consecutivos desde 1 hasta 10, luego
  2. aplico logaritmo natural, luego
  3. tomo el promedio, luego
  4. saco raíz cuadrada

Como podrá notar el lector, este operador de nombre exótico “pipe operator” puede interpretarse como un “luego” o “después” a la hora de leer el código. Notará también que ahora existe, además de una mayor facilidad de lectura, una coincidencia exacta en el orden de aplicación de funciones y en el orden de aparición de las instrucciones, no quiere decir que las otras alternativas tengan orden incorrecto, sino que se facilita la comprensión del código cuando se “traduce” a lenguaje natural (el hablado).

Finalmente, ¿cuándo usar este operador? Pues la respuesta es cuando queremos darle mayor claridad a nuestro código con la finalidad de facilitar la lectura, sobre todo cuando vamos a compartirlo con otras personas, así podrán seguir con mayor facilidad lo que nuestros códigos hacen. Agregaré una última razón al por qué usarlo: porque, las nuevas tendencias de uso de R, basado en el desarrollo y “filosofía” del tidyverse promovido por R Studio apuntan a que esta es la forma natural de escritura moderna en R y muchos posts, foros y sitios de consulta ofrecen este nuevo “acento” cuando se habla R.

BONO: para obtener el pipe operator en R Studio use Ctrl + Shift + M

Más información en: