出于我使用magrittr
管道语法的任何原因,并且遇到了一个奇怪的错误,当您 scope> scope 显式地将调用符合%>%
时。我知道使用下面的语法会破坏管道的目的,但是我很好奇为什么发生错误。
sum
的第一个呼叫按预期工作并输出1
。
第二个呼叫导致错误: Error in pipes[[i]] : subscript out of bounds
。
library(magrittr)
`%>%`(1,sum())
magrittr::`%>%`(1,sum())
查看管道的源代码,我认为该错误的原因与操纵环境的第一行有关,但是我敢肯定它正在引入什么问题。
function (lhs, rhs) {
parent <- parent.frame()
env <- new.env(parent = parent)
chain_parts <- split_chain(match.call(), env = env)
任何人都可以解释这种行为吗?
管道参数(%>%,%$%等...(实际上都是Magrittr中的pipe()
功能。功能所做的第一件事是使用内部的,非出口的函数split_chain
。
split_chain()
获取呼叫的第一个元素(在这种情况下,使用的功能之一是管道操作员之一(,并通过另一个内部的,非出口的函数运行,称为 is_pipe()
,看起来像:
function(pipe)
{
identical(pipe, quote(`%>%`)) ||
identical(pipe, quote(`%T>%`)) ||
identical(pipe, quote(`%<>%`)) ||
identical(pipe, quote(`%$%`))
}
如果这并不能以真实的形式返回,则该功能退出返回缺少管道类型的列表以及引起问题的参数的右手一侧。范围时,la magrittr::'%>%'
呼叫的第一部分包括明确的范围范围,因此未能通过这些硬编码检查。