3

根据 H. Wickham 的书R Packages,在 Package Metadata 一章中,关于如何添加包依赖项,Hadley 指出了使用语法显式引用外部函数的充分理由package::function()

在此处添加包依赖项可确保安装它。但是,这并不意味着它将与您的包(即 library(x))一起附加。最佳实践是使用语法 package::function() 显式引用外部函数。这使得很容易识别哪些函数存在于您的包之外。这在您将来阅读代码时特别有用。

来自R 包 | 包元数据

但是当function是中缀运算符时怎么办呢?例如,似乎我做不到1:10 magrittr::"%>%" sqrt?并且在这里采用函数样式会违背使用管道运算符的目的......不是吗?

4

2 回答 2

2

我认为你只使用从 magrittr 那里导入是安全的。但是,如果你想要,你可以通过做确保你的符号是指你想要的那个

your_fun <- function(){
  `%>%` <- magrittr::`%>%`
  # now use %>% like you normally would
  # and you can be sure it refers to the magrittr version.
  return(42)
}
于 2017-03-23T16:52:44.633 回答
2

您不能将package::infix它与中缀语法一起使用,但您可以将中缀运算符与标准语法一起使用。例如:

"+"(1, 2)
# [1] 3

Hmisc::"%nin%"(1:3, 2)
# [1]  TRUE FALSE  TRUE

不幸的是,这在magrittr未加载包时不起作用,可能是由于它的替换技巧。

## what a shame that this beauty doesn't work:
magrittr::"%>%"(1:5, mean)
# Error in pipes[[i]] : subscript out of bounds

library(magrittr)
"%>%"(1:5, mean)
# [1] 3

在包上下文中,我建议只导入magrittr,或至少导入"%>%".


您引用的来源足以解释此最佳实践背后的一些原因:

这使得很容易识别哪些函数存在于您的包之外。这在您将来阅读代码时特别有用。

这似乎不适用于这种情况。您不太可能忘记%>%来自哪里或错误地认为它是在您的包中创建的。

于 2017-03-23T16:56:18.480 回答