我遇到过这样一种情况,%>%当结合使用时产生非常惊人的输出!.请考虑以下代码:
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)
我怀疑这是一个操作顺序问题:
!is.na(x) %>% sum
Run Code Online (Sandbox Code Playgroud)
正在评估
!(is.na(x) %>% sum)
Run Code Online (Sandbox Code Playgroud)
这相当于 TRUE