簡體   English   中英

當`function`是中綴運算符時,如何在包內使用`package :: function()`?

[英]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()顯式引用外部函數 這樣可以很容易地確定哪些功能在您的程序包之外。 這在以后閱讀代碼時特別有用。

R包| 包元數據

但是,如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM