繁体   English   中英

R:如何最好地将 %>% 等中缀运算符导入我的 package?

[英]R: How to best import infix operators like %>% into my package?

我正在制作一个 R-Package,我正在努力导入中缀函数,如%>%:=%dopar%

DESCRIPTION文件中,我使用Imports: <otherPackage> (例如Imports: doParallel )概念。 Within the code I use the package::function() (eg dplyr::mutate() ) notion, which seems to work ( R CMD check is pleased) but how do I import infix functions?

@importFrom (eg #' @importFrom magrittr %>% ) roxygen 方式似乎适用于%>%:=%dopar% 但由于它被复制到NAMSEPACE文件中,将@importFrom添加到一个 function 解决了包范围内的问题,这似乎相当“hacky”。

将此类功能导入我的 package 的最佳做法是什么?

我不确定在这种情况下是否有一个最佳实践。 使用@importFrom更新NAMESPACE文件确实是一个包范围的指令,但我从未遇到过有问题的 package 或避免它的原因。 如果您愿意,可以使用相同的@importFrom指令注释多个函数,表示哪些函数使用哪些导入,并且不会引起任何冲突; 不过,这完全取决于您,一个就足够了。 使用@import可能会令人不悦,但我认为这实际上取决于您导入的 package。

根据您的问题,我收集到您明确使用:: (我个人认为这是一种很好的做法),然后您甚至不需要更改NAMESPACE 对于大多数情况来说,这很好,尽管可能有非常特殊的情况通常需要单独考虑。 这些特殊情况,至少在我的经验中,通常与 S4 generics 有关。

Take for instance the base::rowSums function: it is not a generic function in base , but if the Matrix package is attached, rowSums is "transformed" into an S4 generic, but the generic is not in the base package. 为什么会出现这种情况超出了这个答案的 scope (有关更多信息,请参阅?Methods_for_Nongenerics ),但这意味着如果您的 package 使用符号base::rowSums ,它不会调度到来自Matrix的方法。 支持这两种情况的唯一方法(即当用户不使用Matrix时以及何时使用时)是使用没有base::rowSums

现在,关于中缀运算符,如果你想使用:: ,你需要类似base::`%in%`("a", c("a", "b"))的东西,这基本上需要使用它作为 function 并丢失了中缀语法,这是您可能不想要的。

因此,除非您有非常具体的理由避免使用其中一种,否则请使用您喜欢的任何符号。 我个人会尽可能地坚持:: ,但永远不会将它用于中缀运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM