【问题标题】:how can I add an roxygen @export all functions in a package如何在包中添加 roxygen @export 所有功能
【发布时间】:2013-01-29 16:22:48
【问题描述】:

我正在接管一个现有的包。在 R 需要显式导出函数之前,该包是用 .Rd 文档编写的。

我的第一步是使用 Rd2roxygen 将文档转换为 roxygen(非常感谢 Yihui 和 Hadley 提供的这个软件包!)。

但是现在这个包不工作了,因为函数没有被导出。我宁愿默认导出所有功能。在这一点上,我的一般方法似乎是确定一个可以为每个函数找到的正则表达式(##' @return 将是一个很好的目标)并在它上面的行中插入##' @export

在伪代码中:

for all files in the `R/` directory{
   for each line starting in `##' @return`{ 
      insert `##' @export` in the preceeding line
}}

结果将是替换:

##' @return something

##' @export
##' @return something that varies with each function

获取函数列表并将它们添加到 NAMESPACE 将不起作用,因为如果 @export 不在每个函数上方的 roxygen 代码中,devtools::document("mypackage") 将覆盖它。

问题:将@export 添加到包中每个函数的roxygen 文档中最有效的方法是什么?

更好的选择是解析 NAMESPACE 并相应地解析 exportmethod 语句。

【问题讨论】:

  • 文档很清楚Rd2roxygen 不支持它,并且欢迎使用补丁。 (见package?Rd2roxygen)所以,如果你得到一个好的答案,你应该考虑将它作为一个补丁提交。

标签: regex r roxygen2


【解决方案1】:

编辑:仅使用在 NAMESPACE 中导出的函数,并假设它们在其 Roxygen 块中的某处没有 @export 语句,我们可以对所有 exported 函数进行 hacky 解析:

NAMESPACE <- readLines("NAMESPACE")
exported_fns <- grep( "^export\\(", NAMESPACE, value=TRUE )
exported_fn_names <- gsub( "export\\((.*)\\)", "\\1", exported_fns )
fn_match_re <- paste("^", exported_fn_names, " ?<- ?", sep="")

for( file in list.files("./R", full.names=TRUE) ) {
  doc <- readLines( file )
  for( i in seq_along(doc) ) {
    if( any( sapply( fn_match_re, function(x) {
      length( grep( x, doc[i] ) ) > 0
      } ) ) ) {
      doc[i] <- paste( "##' @export", doc[i], sep="\n" )
    }
  }
  writeLines( doc, file )
}

【讨论】:

  • 嗯。这是一个好的开始,但有两个显而易见的错误:1)它为每个函数写入多个 ##' @export\n##' @return,2)@return 的内容丢失
  • 啊——如果你想确保你只匹配@return,你可以试试gsub( "^##' @return (.*)", "##' @export\n##' @return \\1", doc )。这假设所有@return 语句后跟一个空格和一些返回字符串。我不确定您是否想以某种方式修改 @return 语句。
  • 如果你们中的一个可以在 Github 上向我发送拉取请求,那就太好了。你得到的补丁在我眼里已经足够好了。谢谢!
  • 酷!我提交了一个拉取请求,所有内容都封装为一个函数。
  • 仅供参考,Rd2roxygen 1.2 现在支持@export
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2020-08-02
  • 2012-01-14
  • 1970-01-01
相关资源
最近更新 更多