[英]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.