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
= c(2, 5, 7, 1, 8, 3)
x
#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 |>
.