egn*_*nha 5 r roxygen2 r-package
问题\xe2\x80\x94 我想导出函数列表作为 R 包的一部分,最好使用 roxygen2。
\n\n更准确地说,我想导出列表中的函数,而不是列表本身。例如,考虑作为闭包生成的函数列表,如下所示:
\n\naddval <- 1:100\nfns <- lapply(addval, function(y) {force(y); function(x) x + y})\nnames(fns) <- paste0("add_", addval)\nRun Code Online (Sandbox Code Playgroud)\n\n那么问题是将函数(fns例如,在 中使用相同的名称)绑定到包环境,然后将它们包含在包的导出函数中。
将函数绑定到包环境可以很容易地完成;一种方法是
\n\nfor (nm in names(fns)) assign(nm, fns[[nm]])\nRun Code Online (Sandbox Code Playgroud)\n\n但是是否可以使用 roxygen2 标签导出函数add_1、add_2等?
更重要的是:我希望 roxygen2 继续NAMESPACE为我管理文件,并且不希望export()直接编写调用。我能看到这样做的唯一方法是编写代码来生成样板文件,例如
#\' @export add_1\nNULL\n\n#\' @export add_2\nNULL\n\n# ...\nRun Code Online (Sandbox Code Playgroud)\n\n或更好
\n\n#\' @export\nadd_1 <- fns[["add_1"]]\n\n#\' @export\nadd_2 <- fns[["add_2"]]\n\n# ...\nRun Code Online (Sandbox Code Playgroud)\n\n(并放弃上面的 for 循环)。
\n\nroxygen2 是否已经拥有相当于此类样板生成的设施,或者我必须自己提供此设施?
\n\n我认为这样的设施可以更简洁地表达为
\n\n#\' @exportObjects names(fns)\nNULL\nRun Code Online (Sandbox Code Playgroud)\n\n其中标签@exportObjects将其“参数”解释为要导出的对象名称的字符向量。
roxygen2 6.0.1+ 使用新@evalNamespace标签解决了这个问题,它允许您在 NAMESPACE 文件中插入文字条目:
ns_export <- function(nms)\n sprintf("export(%s)", paste(nms, collapse = ","))\n\n#\' @evalNamespace ns_export(names(fns))\nRun Code Online (Sandbox Code Playgroud)\n\n使用标签@evalNamespace比使用指令更安全exportPattern(),因为在使用后者时,必须警惕意外命名包命名空间中与正则表达式匹配的对象。
您可以使用@rawNamespace最近的标签roxygen2,这允许使用文件中有效的任意语法NAMESPACE,包括exportPattern():
#' @rawNamespace exportPattern("^add_.*$")
Run Code Online (Sandbox Code Playgroud)