c(1:20) |> head()
[1] 1 2 3 4 5 6
Status 🟦🟨🟨
Muitas vezes seu código demanda muitas transformações e acaba ficando muito verboso e de dificíl entendimento. Uma forma de facilitar a compreensão em torno das operações em sequência é criar um fluxo em que as operações vão sendo efetuadas em sequência, onde as entradas são as saídas do passo anterior.
O operador |>
(pipe) existe com este intuito, organizar as operações em um fluxo contínuo. O pipe foi implementado a partir da versão 4.1.0 do R e passa um valor para uma função. Os dados são passados do lado esquerdo (lfs - left hand side) para o lado direito (rhs - right hand side). O valor do lado esquerdo (lhs) é passado como o primeiro argumento da função do lado direito (rhs).
Vejamos um exemplo simplificado onde o vetor que possue números de 1 até 20 é passado para a função head
. Com o uso do |>
o vetor é passado como primeiro argumento da função head
e esta por sua vez exibe os seis primeiros elementos.
c(1:20) |> head()
[1] 1 2 3 4 5 6
O código acima é equivalente a:
head(c(1:20))
[1] 1 2 3 4 5 6
Caso se deseje alterar o número de elementos, basta usar o argumento n.
c(1:20) |> head(n = 10)
[1] 1 2 3 4 5 6 7 8 9 10
Equivalente a:
head(c(1:20), n = 10)
[1] 1 2 3 4 5 6 7 8 9 10
Vejamos um outro exemplo, um pouco mais realista e complexo: usar a base mtcars e a partir desta selecionar casos em que o campo mpg seja maior do que 10 e após criar uma variável chamada media_hp, que será a média a partir do campo hp. Poderia ser feito algo do tipo:
<- subset(mtcars, mpg > 10)
df_mtcars <- mean(df_mtcars$hp)
media_hp media_hp
[1] 146.6875
Mesmo sendo um processo pequeno com apenas 2 operações bastante corriqueiras, ler o código já se torna enfadonho, para dizer o mínimo. Também não fica claro, em uma passada de olhos, se as operações possuem relação entre si.
Imagine agora criar as mesmas operações de forma “concatenada” em que uma transformação é passada para a seguinte até que se chegue ao final do fluxo. Em linguagem “humana” algo do tipo:
data frame ➡️ filtrar casos ➡️ selecionar variável ➡️ calcular média
Em R:
|>
mtcars subset(mpg > 10) |>
subset(select = hp, drop = T) |>
mean()
[1] 146.6875
# ou de forma mais sucinta
|>
mtcars subset(mpg > 10, select = hp, drop = T) |>
mean()
[1] 146.6875
Este código é equivalente ao anterior, porém aqui fica mais claro que todas as transformações foram feitas a fim de obter o valor da média de hp dos casos desejados (mpg > 10). Para fazer a atribuição do resultado em uma variável basta, como de costume, ao início ou ao final usar o operador de atribuição <-.
<- mtcars |>
media_hp subset(mpg > 10) |>
subset(select = hp, drop = T) |>
mean()
media_hp
[1] 146.6875
# ou de forma menos usual
|>
mtcars subset(mpg > 10) |>
subset(select = hp, drop = T) |>
mean() -> media_hp
media_hp
[1] 146.6875
A partir da versão 4.2.0 o pipe passou a ter um placeholder (símbolo _
) que serve para que o valor lfs seja passado para outro argumento que não o primeiro da função rhs.
8 |> head(c(1:20), n = _)
[1] 1 2 3 4 5 6 7 8
Equivalente a:
head(c(1:20), n = 8)
[1] 1 2 3 4 5 6 7 8
A partir da versão 4.3.0 o placeholder também pode ser utilizado para operações de extrações com [
. Replicando o exemplo do cálculo de media_hp, porém agora fazendo a extração da variável hp que é retornada como um vetor e passada para a função mean
.
<- mtcars |>
media_hp subset(mpg > 10) |>
$hp |>
_mean()
media_hp
[1] 146.6875
R Core Team (2023)
Wickham (2023/04/21)
Última atualização: 11/10/2024 - 21:53:36