簡體   English   中英

如何使用R包中尚未導出的函數?

[英]How can I use a function inside an R package that has not be exported?

我正在構建一個具有許多輔助功能的簡單R包。 主要功能之一使用了許多輔助功能,例如:

....
#'@ description
#'@ param
#'@ export
...
mainfunction1 <- function(param1,...,auxiliaryfunction){
# Do some stuff
b <- auxiliaryfunction(param2) + c
return(b)
}

...
#'@ description
#'@ param
auxiliaryfunction1 <- function(param5,param6,...){# do stuff}

主要功能應由最終用戶使用,如下所示:

result1 <- mainfunction1(param1, param2, auxiliaryfunction1)

問題是,在構建軟件包時,除非導出了輔助功能,否則它不會找到輔助功能,但是我希望最終用戶無法使用這些輔助功能,或者至少要避免用戶通過引用錯誤地覆蓋輔助功能的問題。包名稱空間。

我怎樣才能做到這一點? 我也應該導出輔助功能嗎?

您正在嘗試解決一個非問題。

如果要用戶使用功能,請導出它。

如果您不希望用戶使用功能,請不要導出它。

那個...

您可能會陷入如何將函數作為參數傳遞給其他函數的問題。 函數是R中的第一類對象,因此可以很容易地傳遞它們。 考慮以下示例:

m <- function(x, y) x + y
n <- function(x, y) x - y
k1 <- function(x, y, FUN) FUN(x, y)
k1(10, 5, FUN = m)
# [1] 15
k1(10, 5, FUN = n)
# [1] 5

k2 <- function(x, y, FUN = m) FUN(x, y)
k2(10, 5) # uses `m()` by default
# [1] 15
k2(10, 5, FUN = m)
# [1] 15
k2(10, 5, FUN = n)
# [1] 5

如果您確實不想讓用戶直接訪問這些功能,而是希望給他們選擇使用哪個功能,則可以在主功能的主體中定義輔助功能並使用例如switch()進行選擇他們:

fun <- function(x, method = c("A", "B")) {
   m <- match.arg(method)
   a <- function(x) x^2
   b <- function(x) sqrt(x)
   switch(m, A = a(x), B = b(x))
}
fun(2)
# [1] 4
fun(2, "A")
# [1] 4
fun(2, "B")
# [1] 1.414214

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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