R:使用管道 %>% 和 pkg::fo 会导致错误 "Error in .::base : unused argument"

标签 r pipe tidyverse magrittr

我正在使用 magrittr 的管道 %>%,后跟一个由 package::function 调用的函数,并收到错误:Error in .::base :used参数(平均值)

有什么问题吗?

library(magrittr)
c(1,2) %>%
  base::mean
#> Error in .::base: unused argument (mean)

最佳答案

发生的情况是,magrittr 很困惑到底要将前一个值插入到哪个函数中。当你这样做时

c(1,2) %>%
  mean

magrittr可以很容易看出mean是一个指向mean函数的符号。但是,当您执行 base::mean 时,事情会变得有点棘手,因为 :: 也是 R 中的函数。让我们比较一下 base::mean 之间的差异base::mean() 在 R 中如何转换为函数调用。

as.list(quote(base::mean))
# [[1]]
# `::`    
# [[2]]
# base    
# [[3]]
# mean

as.list(quote(base::mean()))
#  [[1]]
# base::mean

您可以看到这些解析方式有所不同。当您只需输入 base::mean 时,R 将首先看到 :: 函数,并尝试在其中传递数字。基本上是试图打电话

`::`(., base, mean)

这没有意义,这就是给你特定错误消息的原因

但是如果您显式添加 (),R 可以看到您正在尝试调用从 base::mean 返回的函数,因此它将把参数添加到正确的地方。所以你可以这样做

c(1,2) %>%
  base::mean()

c(1,2) %>%
    (base::mean)

关于R:使用管道 %>% 和 pkg::fo 会导致错误 "Error in .::base : unused argument",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992188/

相关文章:

c - 如何从流中读取数据而不等待换行符?

r - 在 Tidyverse 中过滤事件数据的时间

r - 如何计算 ROCR 包中指定截止点的平均灵敏度和特异性?

将包文档渲染到 github wiki

r - 如何在 R 中箱线图的 x 轴上仅重新排序特定名称?

linux - 有没有办法提高 linux 管道的性能?

bash - 询问时如何在 bash 脚本中自动按 Enter?

r - 如何根据先前值的减少百分比将向量/变量分离为两种状态

r - 如何检测是否为裸变量或字符串

R Shiny 交互式地选择变量来执行计算