为什么以下代码尝试使用magrittr符号的别名%>%失败?

时间:2015-11-05 21:47:44

标签: r magrittr

为什么以下代码不起作用?

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

为什么会发生这种情况,需要采取哪些措施才能使其发挥作用?

1 个答案:

答案 0 :(得分:7)

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

但为什么%>%需要在通话中明确查找(自我或其他)%>%

如果你看一下源代码 - first %>%实际上扩展了完整的调用并构造了没有更多管道和eval的表达式那个表达。因此,实际的%>%运算符只会在管道中调用一次,并且%>%会在第一次调用中直接转换为a %>% b %>% c,然后得到eval&d;(而不是转换)首先到c(b(a)))。

对我而言,这显然可以节省成本,因此可能会更加基本,比如一次做所有事情时更容易跟踪b(a) %>% c