为什么下面的代码不起作用?
require(dplyr)
`%test%`<- `%>%`
mtcars %test% head
#Error in pipes[[i]] : subscript out of bounds
当以下工作?
a <- function(x) x^2
a(4)
#[1] 16
b <- a
b(4)
#[1] 16
为什么会发生这种情况,需要做什么才能使其发挥作用?
正如 alexis_laz 在上面指出的那样,它与在您的表达式中magrittr:::is_pipe
显式检查%>%
并且没有找到它以及因此而导致的后续逻辑分崩离析%>%
有关。
但是为什么%>%
需要%>%
在调用中显式查找(self or other)呢?
如果您查看源代码 - 第一个 %>%
实际上扩展了完整调用并构造了没有更多管道的表达式,而 eval 就是那个表达式。因此,实际的%>%
运算符仅在管道中被调用一次,并a %>% b %>% c
在第一次调用中直接转换为c(b(a))
然后被 eval'd (而不是首先转换为b(a) %>% c
)。
.
对我来说,这并不明显可以节省效率,所以可能是更基本的东西,比如在一次做所有事情时更容易跟踪。