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