R:使用管道%>%和pkg :: fo会导致错误“。:: base中的错误:未使用的参数”

时间:2019-03-04 21:58:04

标签: r pipe tidyverse magrittr

我正在使用magrittr的管道%>%,紧接着是一个由以下命令调用的函数:package :: function,并得到错误:。:: base中的错误:未使用的参数(意味着)

出什么问题了?

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

3 个答案:

答案 0 :(得分:4)

发生了什么事,就是magrittr对于要插入先前值的确切函数感到困惑。刚做完

c(1,2) %>%
  mean

magrittr可以很容易地看到mean是指向均值函数的符号。但是,当您执行base::mean时,事情会变得有些棘手,因为::也是R中的一个函数。让我们比较一下base::meanbase::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)

答案 1 :(得分:1)

请注意,有一个magrittr版本没有此问题,但很长一段时间以来一直没有推送到CRAN。

this问题中所述,magrittr管道的github版本可以成功处理

c(1,2) %>%
    base::mean
[1] 1.5

这是4年前解决的,但从未提交给CRAN。由于大多数人都将使用CRAN版本,因此我不建议编写依赖此修补程序的代码。

答案 2 :(得分:0)

事实证明,如果您使用进一步的参数调用该函数,它将无法正常工作。简单的解决方案是使用(.),即base::mean(.)

library(magrittr)
c(1,2) %>%
  base::mean(.)
#> [1] 1.5

这在magrittr and wrapr Pipes in R, an Examination

中有更详细的解释。