根据H. Wickham的书 R Packages ,在Package Metadata一章中,关于如何添加包依赖,Hadley指出了明确引用外部函数的充分理由语法package::function()
。
在此处添加包依赖项可确保将其安装。但是,这并不意味着它将与您的包一起附加(即库(x))。 最佳做法是使用语法package :: function()显式引用外部函数。这样可以非常轻松地识别出包装外的哪些功能。这在将来阅读代码时特别有用。
来自R Packages | Package metadata。
但是当function
是中缀运算符时怎么做?例如,似乎我不能1:10 magrittr::"%>%" sqrt
?并且在这里采用函数样式会违背使用管道运算符的目的......不是吗?
答案 0 :(得分: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)
}
答案 1 :(得分: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
,或者至少导入"%>%"
。
您引用的来源足以解释这种最佳做法背后的一些原因:
这样可以很容易地识别出包装外的哪些功能。这在将来阅读代码时特别有用。
在这种情况下,这似乎并不适用。您不太可能忘记%>%
来自哪里或错误地认为它是在您的包中创建的。