[英]How to use `package::function()` inside a package when `function` is an infix operator?
根据H. Wickham的《 R Packages》一书,在“ Package Metadata”一章中,有关如何添加软件包依赖关系,Hadley指出了充分的理由使用语法package::function()
显式引用外部函数。
在此处添加软件包依赖项可确保将其安装。 但是,这并不意味着它将与您的软件包(即library(x))一起附加。 最佳实践是使用语法package :: function()显式引用外部函数 。 这样可以很容易地确定哪些功能在您的程序包之外。 这在以后阅读代码时特别有用。
但是,如果function
是中缀运算符,该怎么办? 例如,似乎我无法执行1:10 magrittr::"%>%" sqrt
吗? 并且在这里采用函数样式会违背使用管道运算符的目的……不是吗?
我认为,仅使用从magrittr导入的内容,您会很安全。 但是,如果您愿意,可以通过执行以下操作来确保您的符号指向您想要的符号
your_fun <- function(){
`%>%` <- magrittr::`%>%`
# now use %>% like you normally would
# and you can be sure it refers to the magrittr version.
return(42)
}
您不能将package::infix
用于infix语法,但是可以将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
,或至少导入"%>%"
。
您引用的来源足以说明此最佳实践背后的一些原因:
这样可以很容易地确定哪些功能在您的程序包之外。 这在以后阅读代码时特别有用。
在这种情况下,这似乎并不适用。 您不太可能会忘记%>%
来源或错误地认为它是在软件包中创建的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.