Erro magrittr::extract()

Alguém saberia informar por que o magrittr::extract() tem este comportamento estranho, abaixo alguns exemplos apresentando o erro, as vezes utilizo esta função em vez de utilizar o . para recuperar o valor antes do pipe:

(5+2) %>% magrittr::extract()*2 # funciona, resultado 14
5+2 %>% magrittr::extract()2 # não funciona, resultado 9
5
2 %>% magrittr::extract()2 # funciona, resultado 20
5
2+2 %>% magrittr::extract()2 # não funciona, resultado 14
(5
2+2) %>% magrittr::extract()*2 # funciona, resultado 24

Oi Pedro…

Fiz um exemplo com as duas primeiras linhas que você ofereceu.
O comportamento foi diferente devido à ordem que as operações são realizadas! O parênteses no primeiro caso é o que deixa claro a ordem das operações, e isso causa um comportamento diferente do segundo caso. No segundo caso, como não tem parênteses, a soma com 5 é realizada por último, depois de passar pelo extract. Já no primeiro caso, o 5 e o 2 são somados antes de passar pelo extract.

library(magrittr)


# ordem do que está acontecendo:
# soma 5+2 = 7
# o 7 é oferecido para o extract, e o resultado é 7 também
# 7 multiplicado por 2 é 14.
(5+2) %>% magrittr::extract()*2 
#> [1] 14



# ordem do que está acontecendo:
# 2 é passado para o extract.
# resultado de extract de 2 é 2.
# 2 é multiplicado por 2 = 4
# 4 é somado com 5, e o resultado é 9.

5+2 %>% magrittr::extract()*2 
#> [1] 9

Created on 2021-10-19 by the reprex package (v2.0.1)

1 curtida