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.