用于 !(或任何逻辑运算符)%>%(magrittr)会产生意外输出

Joh*_*aul 6 r magrittr

我遇到过这样一种情况,%>%当结合使用时产生非常惊人的输出!.请考虑以下代码:

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
Run Code Online (Sandbox Code Playgroud)

好的,没什么好惊的.但如果我尝试使用%>%奇怪的东西来缩短它:

!is.na(x) %>% sum

[1] TRUE
Run Code Online (Sandbox Code Playgroud)

TRUE?? 不是我的预期 - 它应该是20.

如果我删除!它给我0按预期:

> is.na(x) %>% sum
[1] 0
Run Code Online (Sandbox Code Playgroud)

如果我添加括号,它的工作原理:

> {!is.na(x)} %>% sum
[1] 20
Run Code Online (Sandbox Code Playgroud)

!作为一个功能处理工作:

> is.na(x) %>% `!` %>% sum
[1] 20
Run Code Online (Sandbox Code Playgroud)

什么是!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
Run Code Online (Sandbox Code Playgroud)

C_Z*_*_Z_ 6

我怀疑这是一个操作顺序问题:

!is.na(x) %>% sum
Run Code Online (Sandbox Code Playgroud)

正在评估

!(is.na(x) %>% sum)
Run Code Online (Sandbox Code Playgroud)

这相当于 TRUE