6.2 Outros operadores

O pacote {magrittr} possui outros operadores, que, embora sejam menos utilizados, também são úteis. São eles:

  • Assignment operator %<>%

  • Operador tee %T>%

  • Exposition operator %$%

Imagine que queremos tirar a raiz quadrada de um vetor de números.

x <- c(1, 2, 3, 4, 5)

x %>% sqrt()
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068

Se quisermos sobrescrever o objeto x com a raiz quadrada dos seus valores, basta utilizarmos o nosso bom e velho operador de atribuição <-.

x <- x %>% sqrt()

Podemos, no entanto, utilizar o operador %<>% para reescrever o código acima de uma maneira mais compacta.

x <- c(1, 2, 3, 4, 5)
x %<>% sqrt()

Além de mandar o objeto x para o primeiro argumento da função sqrt(), assim como o %>% faria, esse operador também salva o resultado da operação de volta no objeto x, o sobrescrevendo.

Este operador pode ser usado sempre que desejamos fazer algo da forma

objeto <- objeto %>% 
  funcao_1() %>% 
  funcao_2() %>% 
  ...
  funcao_n()

O operador %T>% retorna o valor do comando anterior a ele, não o resultado do lado direito como o %>% faz. O seguinte exemplo vai imprimir na tela os valores de 1 a 10. Se usássemos o pipe, o código retornaria a soma dos dez números.

1:10 %T>% sum() %>% cat()
## 1 2 3 4 5 6 7 8 9 10

Neste caso, o operador não parece fazer sentido e apenas deixa o código mais complicado, mas se desejamos usar funções como cat() ou plot() que não retornam nada, o operador se torna muito útil.

# Vamos imprimir na tela os valores de 1 a 10 e depois soma-los.
1:10 %T>% 
  cat() %>% 
  sum()
## 1 2 3 4 5 6 7 8 9 10
## [1] 55

O operador %$% pode ser utilizado para expor as colunas de um data frame para a função aplicada no lado direito.

# Podemos chamar qualquer coluna da base diretamente.
mtcars %$% mean(mpg)
## [1] 20.09062

Se não ficou claro o que esse operador está fazendo, imagine que ele transforma todas as colunas da base em objetos (assim como a nefasta função attach()), mas sem salvar nada no nosso environment.

mtcars %$%
  mpg %>% 
  mean() %>% 
  sqrt()
## [1] 4.482257

Ele faz um papel equivalente ao operador $.

mtcars$mpg
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4
mtcars %$% mpg
##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
## [31] 15.0 21.4

Para mais informações sobre o pipe e outras funções do pacote {magrittr}, visite a página Ceci n’est pas un pipe.


Curso-R