R:使用管道 %>% 和 pkg::fo 会导致错误 "Error in .::base : unused argument"
R: Using pipe %>% and pkg::fo leads to error "Error in .::base : unused argument"
我正在使用 magrittr
的管道 %>%,紧接着是 package::function 调用的函数,并得到错误:Error in .::base : 未使用的参数(平均值)
问题是什么?
library(magrittr)
c(1,2) %>%
base::mean
#> Error in .::base: unused argument (mean)
事实证明,如果您使用进一步的参数调用该函数,它将无法正常工作。简单的解决方案是使用 (.)
,即 base::mean(.)
:
library(magrittr)
c(1,2) %>%
base::mean(.)
#> [1] 1.5
这在以下位置有更详细的解释:magrittr and wrapr Pipes in R, an Examination
发生的事情是 magrittr 对要将先前的值插入到哪个函数中感到困惑。当你做
c(1,2) %>%
mean
magrittr
很容易看出mean
是一个指向均值函数的符号。但是当你使用 base::mean
时,事情会变得有点棘手,因为 ::
也是 R 中的一个函数。让我们比较一下 R 中 base::mean
和 base::mean()
之间的区别它们被翻译成函数调用。
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)
请注意magrittr
有一个版本没有这个问题,但它已经很长时间没有被推送到CRAN了。
如 this 问题中所述,github 版本的 magrittr 管道可以成功处理
c(1,2) %>%
base::mean
[1] 1.5
这是 4 年前修复的,但从未进入 CRAN。由于大多数人会使用 CRAN 版本,因此我不建议编写依赖于此修复程序的代码。
我正在使用 magrittr
的管道 %>%,紧接着是 package::function 调用的函数,并得到错误:Error in .::base : 未使用的参数(平均值)
问题是什么?
library(magrittr)
c(1,2) %>%
base::mean
#> Error in .::base: unused argument (mean)
事实证明,如果您使用进一步的参数调用该函数,它将无法正常工作。简单的解决方案是使用 (.)
,即 base::mean(.)
:
library(magrittr)
c(1,2) %>%
base::mean(.)
#> [1] 1.5
这在以下位置有更详细的解释:magrittr and wrapr Pipes in R, an Examination
发生的事情是 magrittr 对要将先前的值插入到哪个函数中感到困惑。当你做
c(1,2) %>%
mean
magrittr
很容易看出mean
是一个指向均值函数的符号。但是当你使用 base::mean
时,事情会变得有点棘手,因为 ::
也是 R 中的一个函数。让我们比较一下 R 中 base::mean
和 base::mean()
之间的区别它们被翻译成函数调用。
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)
请注意magrittr
有一个版本没有这个问题,但它已经很长时间没有被推送到CRAN了。
如 this 问题中所述,github 版本的 magrittr 管道可以成功处理
c(1,2) %>%
base::mean
[1] 1.5
这是 4 年前修复的,但从未进入 CRAN。由于大多数人会使用 CRAN 版本,因此我不建议编写依赖于此修复程序的代码。