%>%
と組み合わせると、非常に驚くべき出力が生成される状況に遭遇しました!
。次のコードを検討してください。
x <- c(1:20)
y <- !is.na(x)
> y
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> sum(Y)
[1] 20
わかりました、驚くべきことは何もありません。%>%
しかし、奇妙なことを使用して短縮しようとすると、次のことが起こります。
!is.na(x) %>% sum
[1] TRUE
TRUE
?? 私が期待したものではありません-そうあるべきです20
。
を削除する!
と、期待どおりに表示されます0
:
> is.na(x) %>% sum
[1] 0
括弧を追加すると動作します:
> {!is.na(x)} %>% sum
[1] 20
関数として扱う!
と次のようになります。
> is.na(x) %>% `!` %>% sum
[1] 20
ではなく!is.na(x) %>% sum
、なぜそれが返されるのですか?TRUE
20
編集:他の論理演算子は同様の動作を生成します:
> T&T %>% sum()
[1] TRUE
> {T&T} %>% sum()
[1] 1
> T|T %>% sum()
[1] TRUE
> {T|T} %>% sum()
[1] 1