Capítulo 4 Operador pipe (Ctrl + Shift + m)

Pipes são ferramentas extremamente poderosas para clarear (decodificar) uma sequência de múltiplas operações.

Podemos apontar o operador pipe como uma das grandes revoluções dos último tempos no R, pois torna a leitura de uma sequência de códigos muito mais lógica, fácil e compreensível.

O |> é um operador nativo do R, que encontraremos disponível a partir da versão 4.1.

Basicamente, o operador |> usa o resultado do seu lado esquerdo como primeiro argumento da função do lado direito. Só isso!!!

No código abaixo, para termos acesso ao |> vamos carregar o pacote tidyverse (que carrega diversos pacotes).

#Criando um vetor x
x = c(2, 5, 7, 1, 8, 3)

#Calculando a média dos elementos de x com 2 casas decimais
x |> 
  mean() |> 
  round(digits = 2)
## [1] 4.33

Com o código descrito acima, enviamos o objeto x como o primeiro argumento da função mean e, em seguida, enviamos o resultado da expressão mean(x) como o primeiro argumento da função round, que diferentemente da função mean, necessita de dois argumentos, o valor a ser arredondado e o número de casas decimais, no caso digits = 2.

Mas qual foi o ganho? Se escrevermos os comandos na forma usual temos:

#Calculando a media de x com 2 casas decimais na forma usual
round(x = mean(x), digits = 2)
## [1] 4.33

Aparentemente, o ganho não foi tão grande que justifique essa euforia com o operador. Isso ocorreu por que o exemplo acima usou apenas duas funções. Agora pense que precisamos executar 10 funções aninhadas! O uso do |> vai permitir transformar um código confuso e difícil em algo simples e intuitivo.

Retiramos o exemplo abaixo do site curso-r, e ele se refere a seguinte situação problema: “vamos imaginar que precisamos escrever uma receita de um bolo usando o R, e cada passo da receita é uma função”:

#Receita do bolo
esfrie(asse(coloque(bata(acrescente(recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo"), "farinha", ate = "macio"), duracao = "3min"), lugar = "forma", tipo = "grande", untada = TRUE), duracao = "50min"), "geladeira", "20min")

Entenderam????? Imaginamos que não!

|> no código:

#Receita do bolo com |>
recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo") |>
  acrescente("farinha", ate = "macio") |>
  bata(duracao = "3min") |>
  coloque(lugar = "forma", tipo = "grande", untada = T) |>
  asse(duracao = "50min") |>
  esfrie("geladeira", "20min")

Agora o código realmente parece uma receita de bolo, certo?

Já estão apaixonados pelo tidyverse?

Para você ativar o atalho Ctrl + Shift + m no Windows ou Cmd + Shift + m no Mac, precisamos ativar esta opção. Basta irmos no menu Tools \(\rightarrow\) Global Options \(\rightarrow\) Code e ativar a caixa como especificado abaixo (é preciso ter uma versão igual ou superior a 4.1 do R):

Aqueles que forem usuários do %>% do pacote magrittr, puderam perceber que existe grande semelhança entre o operador pipe nativo da linguagem com o pipe do pacote. Existem sim, algumas diferenças que não são tão importantes neste momento. Para aqueles que estiverem conhecendo o operador pipe pela primeira vez, sugiro fortemente o uso do pipe nativo |>.