我正在构建一个包含许多辅助功能的简单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)
问题是,当构建包时,它永远不会找到辅助功能,除非它们被导出,但是我希望它们不能被最终用户使用或者至少避免用户错误地覆盖它们的问题通过引用包命名空间。
我该怎么做? 我也应该导出辅助功能吗?
答案 0 :(得分:2)
您正试图解决一个无问题。
如果您希望用户使用某项功能,请将其导出。
如果您不希望用户使用某项功能,请不要将其导出。
那说......
您可能会了解函数如何作为参数传递给其他函数。函数是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
如果您真的不希望用户直接访问这些函数但想让他们选择使用哪些函数,那么在main函数体中定义辅助函数并使用,例如,{ {1}}在它们之间进行选择:
switch()