Operadores pipe do tidyverse (%>%) e pipe nativo (|>) do R

Wlademir Prates

O que você encontra aqui?

O primeiro pipe: %>% do pacote magrittr

O pipe é um operador que vai empilhar comandos.

Isso:

head(mtcars, 5)

Se torna isso:

library(magrittr)
mtcars %>% head(5)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

ou …

Isso:

head(mtcars[mtcars[["am"]] == 1, c("am", "mpg", "cyl")], 5)

Se torna isso:

library(dplyr)
mtcars %>% select(am, mpg, cyl) %>% filter(am == 1) %>% head(5)
              am  mpg cyl
Mazda RX4      1 21.0   6
Mazda RX4 Wag  1 21.0   6
Datsun 710     1 22.8   4
Fiat 128       1 32.4   4
Honda Civic    1 30.4   4

Vantagens do operador pipe

  • Melhora muito a legibilidade do código e transformou a sintaxe de grande parte dos códigos em R.

  • É importado por diversos pacotes (tidyverse, dplyr, …), mas o original é o magrittr.

  • Foi tão importante para o R que foi desenvolvido um novo operador pipe nativo do R.

O novo pipe: |> incorporado ao R-base

Diversas melhorias no R a partir da versão 4.0, entre elas o pipe nativo do R.

Não precisa instalar nenhum pacote.

Exemplo:

mtcars |> select(am, mpg, cyl) |> filter(am == 1) |> head(5)
              am  mpg cyl
Mazda RX4      1 21.0   6
Mazda RX4 Wag  1 21.0   6
Datsun 710     1 22.8   4
Fiat 128       1 32.4   4
Honda Civic    1 30.4   4

Outro exemplo com |>

Calculando algumas estatísticas da variável HP para os carros manuais e automáticos.

mtcars |>
  group_by(am) |>
  summarise(
    mean_hp = mean(hp),
    max_hp = max(hp),
    min_hp = min(hp),
    sd_hp = sd(hp)
  )
# A tibble: 2 × 5
     am mean_hp max_hp min_hp sd_hp
  <dbl>   <dbl>  <dbl>  <dbl> <dbl>
1     0    160.    245     62  53.9
2     1    127.    335     52  84.1

Considerações

  • Para programadores R: essencial programar com operador pipe.
  • Dê preferência ao operador nativo do R (|>), pois não precisa importar pacotes.
  • Existem diferenças de uso entre %>% e |>, mas em geral são situações específicas e tópicos mais avançados.
  • Na maioria das vezes ambos operadores fazem a mesma coisa.

Leitura complementar

Operadores pipe do tidyverse (%>%) e pipe nativo (|>) do R