使用roxygen2导出功能列表

埃尼亚

问题-我想的功能列表导出为的R包的一部分,最理想的是采用roxygen2。

更精确地说,我要导出的功能列表中,而不是名单本身。例如,考虑作为闭包生成的函数列表,如下所示:

addval <- 1:100
fns <- lapply(addval, function(y) {force(y); function(x) x + y})
names(fns) <- paste0("add_", addval)

然后问题是要的功能(使用相同的名称中结合fns,例如)到封装环境中,然后将它们包括在封装的导出函数之一。

将功能绑定到包环境可以很容易地完成;一种方法是

for (nm in names(fns)) assign(nm, fns[[nm]])

但是,它则可以使用roxygen2标签导出功能add_1add_2等等?

更重要的是:我希望roxygen2继续NAMESPACE为我管理文件,并且希望不必export()直接编写调用。我看到的唯一方法是编写代码以生成样板

#' @export add_1
NULL

#' @export add_2
NULL

# ...

或更好

#' @export
add_1 <- fns[["add_1"]]

#' @export
add_2 <- fns[["add_2"]]

# ...

(并放弃上述for循环)。

roxygen2是否已经具有与这种样板生成等效的功能,或者我必须自己提供此功能?

我想到这样的工具可以更简洁地表达为

#' @exportObjects names(fns)
NULL

标签@exportObjects将其“参数”解释为要导出的对象名称的字符向量。

更新资料

roxygen2 6.0.1+通过一个新@evalNamespace标签解决了这个问题,该标签允许您在NAMESPACE文件中插入文字条目:

ns_export <- function(nms)
  sprintf("export(%s)", paste(nms, collapse = ","))

#' @evalNamespace ns_export(names(fns))

使用标记@evalNamespace比使用exportPattern()伪指令更安全,因为使用伪指令时,必须警惕意外在匹配正则表达式的软件包名称空间中命名对象。

rl

您可以@rawNamespace在最近使用标记roxygen2,这允许使用在NAMESPACE文件中有效的任意语法,包括exportPattern()

#' @rawNamespace exportPattern("^add_.*$")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章