web-dev-qa-db-ja.com

%>%パイプを使用したdplyrのチェーン算術演算子

dplyrまたはmagrittrパッケージ、より具体的には連鎖関数%>%で、基本演算子+-*、および/に問題がある理由を理解したいと思います。

連鎖は、前のステートメントの出力を受け取り、それを次の引数の最初の引数としてフィードします。

1:10 %>% sum
# [55]

したがって、なぜこれが機能しないのですか?

1:10 %>%  *2 %>% sum
1:10 %>% .*2 %>% sum

また、次の構文は加算/減算には機能しますが、乗算や除算には機能しないこともわかりました。なぜそうなのか?

1:10 %>% +(2) # works OK
1:10 %>% *(2) # nope...

では、data.frameで*2操作を実行する場合でも、匿名関数を作成する必要がありますか?

1:10 %>% (function(x) x*2) %>% sum

おかげで、私は他のSO質問で答えを見つけることができませんでした。

26
agenis

演算子をバッククォートまたは引用符で囲むと、期待どおりに機能するはずです。

1:10 %>%  `*`(2) %>% sum
# [1] 110

1:10 %>%  `/`(2) %>% sum
# [1] 27.5
33
jbaums

または、Aliasesパッケージのmagrittrを使用します。例:

1:10 %>% multiply_by(2)
# [1]  2  4  6  8 10 12 14 16 18 20

1:10 %>% add(2)
# [1]  3  4  5  6  7  8  9 10 11 12

Aliasesには、ブール演算子、抽出/置換、および算術演算子の「単語」が含まれます

23
Henrik