我遇到过一种情况,%>%
当与!
. 考虑以下代码:
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