为什么以下代码不起作用?
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
为什么会发生这种情况,需要采取哪些措施才能使其发挥作用?
答案 0 :(得分:7)
正如alexis_laz上面指出的那样,它与page
明确检查表达式中的magrittr:::is_pipe
并且没有找到它以及随后的逻辑在%>%
中因此而分崩离析。
但为什么%>%
需要在通话中明确查找(自我或其他)%>%
?
如果你看一下源代码 - first %>%
实际上扩展了完整的调用并构造了没有更多管道和eval的表达式那个表达。因此,实际的%>%
运算符只会在管道中调用一次,并且%>%
会在第一次调用中直接转换为a %>% b %>% c
,然后得到eval&d;(而不是转换)首先到c(b(a))
)。
对我而言,这显然可以节省成本,因此可能会更加基本,比如一次做所有事情时更容易跟踪b(a) %>% c
。