无论出于何种原因,我都在玩 magrittr
管道语法,并遇到一个奇怪的错误,当您明确限定对 %>%
的调用时会发生这种错误。 .我知道使用下面的语法会破坏管道的用途,但我很好奇为什么会发生错误。
第一次调用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)
谁能解释这种行为?
最佳答案
管道参数(%>%、%$% 等)实际上都是相同的 pipe()
magrittr 中的函数。该函数所做的第一件事是使用内部的非导出函数将调用拆分为其组成部分split_chain
。 .split_chain()
获取调用的第一个元素(使用的函数,在本例中为管道运算符之一)并通过另一个名为 is_pipe()
的内部非导出函数运行它看起来像:
function(pipe)
{
identical(pipe, quote(`%>%`)) ||
identical(pipe, quote(`%T>%`)) ||
identical(pipe, quote(`%<>%`)) ||
identical(pipe, quote(`%$%`))
}
如果这没有返回为真,则函数退出返回一个列表,该列表缺少管道类型和导致问题的参数右侧。在确定范围时,一个 la
magrittr::'%>%'
调用的第一部分包括显式范围,因此它无法通过这些硬编码检查。
关于r - 使用 `` magrittr : :`%>%` `` 时 magrittr 管道出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786599/