【问题标题】:How to add unexported functions to R Package如何将未导出的函数添加到 R 包
【发布时间】:2018-04-28 13:09:44
【问题描述】:

我正在开发一个R Package,其中包含我在一个导出函数中使用的多个函数。

我的问题,可能是一个愚蠢的问题,我应该把所有这些未导出函数放在哪里?或者我怎样才能做到这一点?

我不想让用户从R/ 目录访问这些功能。

这是我使用未导出函数add的虚构函数:

my_func <- function(x, y){
   result <- exp(add(x, y))
   return(result)
   }

这是我不想导出的虚构函数add

add <- function(x, y) {
 result <- x + y
 return(result)
}

谢谢

编辑

如果我将所有功能放在/R 中,它们将对用户“可见”。例如,来自xgboost 包的generate.cv.folds 未导出,但您仍然可以使用xgboost:::generate.cv.folds 访问它,我也想这样做。

【问题讨论】:

  • 您必须明确导出您希望用户直接访问的所有函数(在/R 中)(通过:: 机制)。所有非显式导出的函数都不会导出,只能通过::: 访问。您不能隐藏代码(抱歉?)。
  • @RomanLuštrik 但是我可以将那些非显式导出的函数放在哪里(或如何)?我知道任何用户都可以使用package:::function 访问任何功能,但我不希望它们在/R 中可见。谢谢。
  • 你的 R 代码应该在 /R, AFAIK。至少如果你想要一个完全成熟的包。

标签: r function r-package


【解决方案1】:

R 不提供隐藏源代码的基础设施[1]。这样做违背了 R 开发人员的价值观和意愿。

所以,你想用 R 做是不可能的。

[1]http://r.789695.n4.nabble.com/how-to-hide-code-of-any-function-td4474822.html

【讨论】:

  • 我不想隐藏任何东西。我只是不想将函数导出到我的R/。请参阅帖子中的编辑。我只是想做这样的事情。此外,我反对私有源代码,因为我希望用户使用它。
  • 我不确定你在问什么。如果导出函数,则在 NAMESPACE 文件中指定,如编写 R 扩展手册中所述。 /R目录中定义的函数不会自动导出。
  • 我想你只是不明白 NAMESPACE 文件是如何工作的。 generate.cv.folds 没有导出到那里:github.com/dmlc/xgboost/blob/master/R-package/NAMESPACE
  • "kinda" 通常是不够的。我鼓励你学习编写 R 扩展
【解决方案2】:

导出/不导出函数就像在函数文档中添加一行一样简单。我假设你正在使用 roxygen2 来记录你的包。

导出:

#' Add two numeric values
#'
#' This function returns the sum of two values.
#' @param x,y Numeric values.
#' @return Numeric.
#' @export
add1 <- function(x, y) {
 result <- x + y
 return(result)
}

未导出:

#' Add two numeric values.
#'
#' This function returns the sum of two values.
#' @param x,y Numeric values.
#' @return Numeric.
add2 <- function(x, y) {
 result <- x + y
 return(result)
}

请注意文档末尾缺少的@export。创建文档时,NAMESPACE 文件将如下所示:

export(add1)

但它不会有add2 的条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多