问题-我想的功能列表导出为的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_1
,add_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()
伪指令更安全,因为使用伪指令时,必须警惕意外在匹配正则表达式的软件包名称空间中命名对象。
您可以@rawNamespace
在最近使用标记roxygen2
,这允许使用在NAMESPACE
文件中有效的任意语法,包括exportPattern()
:
#' @rawNamespace exportPattern("^add_.*$")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句