r - 使用 `` magrittr : :`%>%` `` 时 magrittr 管道出错

标签 r magrittr

无论出于何种原因,我都在玩 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/

相关文章:

r - 使用 %>% 管道在 dplyr 中链接算术运算符

r - magrittr 包中的管道不适用于函数 rm()

r - 如何收到有关循环/应用程序正在进行的进度的警报

r - 在 R 数据框中插入值的简单查找

r - magrittr dot/period (".") 运算符在管道的最开始时会做什么?

r - R中magrittr和arima的兼容性问题

r - 如何判断管道运算符(operator)是链中的最后一个(还是第一个)?

将函数应用于数据帧变量的子部分并将其保存到原始数据帧的 R 代码

r - 通过 R 中的方向矩阵回溯

r - 在 Y 轴上绘制 2 个变量,在 R 中使用 ggvis