簡體   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