R 当'function'是中缀运算符时,如何在包内使用'package::function()?
根据H.Wickham的书R Packages,在包元数据一章中,关于如何添加包依赖项,Hadley指出了使用语法Package::function显式引用外部函数的好理由 在此处添加包依赖项可确保安装该包。但是,这并不意味着它将随您的软件包(即libraryx)一起提供。最佳实践是使用语法package::function显式引用外部函数。这使得识别哪些函数位于包之外变得非常容易。这在将来阅读代码时特别有用 从R 当'function'是中缀运算符时,如何在包内使用'package::function()?,r,magrittr,infix-operator,R,Magrittr,Infix Operator,根据H.Wickham的书R Packages,在包元数据一章中,关于如何添加包依赖项,Hadley指出了使用语法Package::function显式引用外部函数的好理由 在此处添加包依赖项可确保安装该包。但是,这并不意味着它将随您的软件包(即libraryx)一起提供。最佳实践是使用语法package::function显式引用外部函数。这使得识别哪些函数位于包之外变得非常容易。这在将来阅读代码时特别有用 从 但是,当函数是中缀运算符时,如何执行该操作?例如,我似乎无法执行1:10 magr
但是,当函数是中缀运算符时,如何执行该操作?例如,我似乎无法执行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与中缀语法一起使用,但可以将中缀运算符与标准语法一起使用。例如:
"+"(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,或者至少导入%>%
您引用的资料足以解释此最佳实践背后的一些原因:
这使得识别哪些函数位于包之外变得非常容易。这在将来阅读代码时特别有用
这似乎不适用于这种情况。您不太可能忘记%>%来自何处,或者错误地认为它是在您的包中创建的 我知道这与当前的R风格运动背道而驰,但我想问你是否真的需要在你的包中使用管道语法。真正需要是一个有点过于强烈的声明:但它使代码更易于阅读…return42的目的是什么?嗯。。。你知道的。。。这是对生命、宇宙和一切终极问题的答案。如果让一个函数返回其他任何东西,那将是愚蠢的。除非你想让我还给你一张小猫的照片。这是可以理解的。