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:
df_mtcars <- subset(mtcars, mpg > 10)
media_hp <- mean(df_mtcars$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 <-.
media_hp <- mtcars |>
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.
media_hp <- mtcars |>
subset(mpg > 10) |>
_$hp |>
mean()
media_hp[1] 146.6875
R Core Team (2023)
Wickham (2023/04/21)
Última atualização: 30/04/2025 - 22:50:31