4

为什么下面的代码不起作用?

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

为什么会发生这种情况,需要做什么才能使其发挥作用?

4

1 回答 1

7

正如 alexis_laz 在上面指出的那样,它与在您的表达式中magrittr:::is_pipe显式检查%>%并且没有找到它以及因此而导致的后续逻辑分崩离析%>%有关。

但是为什么%>%需要%>%在调用中显式查找(self or other)呢?

如果您查看源代码 - 第一个 %>%实际上扩展了完整调用并构造了没有更多管道的表达式,而 eval 就是那个表达式。因此,实际的%>%运算符仅在管道中被调用一次,并a %>% b %>% c在第一次调用中直接转换为c(b(a))然后被 eval'd (而不是首先转换为b(a) %>% c)。

.对我来说,这并不明显可以节省效率,所以可能是更基本的东西,比如在一次做所有事情时更容易跟踪。

于 2015-11-06T23:08:15.693 回答