【问题标题】:Automatically document all methods of an S4 generic, using roxygen2使用 roxygen2 自动记录 S4 泛型的所有方法
【发布时间】:2014-08-06 10:47:17
【问题描述】:

我正在使用 编写一个 包作为文档。我在记录 S4 方法时遇到了一些麻烦。我已经定义了一个通用的 方法(例如myGeneric)和一些实现它的方法。

问题:有没有办法自动记录泛型的所有方法?

手动解决方案是为每个方法添加这两行(这将是我的虚拟示例中的第一个方法):

##' @rdname myGeneric-methods
##' @aliases myGeneric,numeric,numeric,missing-method

由于我使用了很多方法,所以我必须添加很多以满足R CMD检查。


我在 Hadley 的 Advanced R 中读到了关于记录 S4 方法 here 可以使用 @genericMethods:

如果您希望自动列出为泛型实现的所有方法,请在泛型文档中使用 @genericMethods。

我认为这不是在roxygen2 中实现的,或者是在另一个名称下实现的。我发现的关于@genericMethods 标签的唯一内容是在 roxygen3 github here 中,该标签已停产(?)。


只是一个虚拟示例,我只记录泛型并希望自动列出所有实现的方法:

##' @param object An object
##' @param data Numeric vector or data.frame
##' @param Fun Function. Default function is \code{sum}
##' @param ... Extra named arguments passed to FUN
##' @docType methods
##' @export 
setGeneric("myGeneric", function(object, data, FUN, ...)
           {standardGeneric ("myGeneric")} )

setMethod("myGeneric", c("numeric", "numeric", "missing"),
          function(object, data,...) { 
              myGeneric(object, data, sum,...) 
          })
setMethod("myGeneric", c("numeric", "data.frame", "missing"),
          function(object, data,...) { 
              myGeneric(object, as.vector(unlist(data), sum,...) 
          })
setMethod("myGeneric", c("numeric", "numeric", "function"),
          function(object, data, FUN,...) {
             ## Do something
          })

任何帮助将不胜感激,

亚历克斯

【问题讨论】:

  • 我不知道有什么方法可以自动记录泛型的所有方法(可能会在实现@genericMethods 时)。我在我所有的具体方法前面使用#' @describeIn myGeneric。这并不能完全回答您的问题,但我认为这是目前实现它的唯一方法。
  • 我在 roxygen 的 official GitHub repo 中进行了搜索,但没有找到任何可以胜任这项工作的 roclet。我认为完整的 roclet 列表在/roxygen/R/rocled-rd.R
  • 我添加了一个issue on GitHub

标签: r roxygen2 s4 r s4 roxygen2


【解决方案1】:

编辑:更新以反映 roxygen2 最新版本的首选方法 - 2016 年 3 月 23 日

实际上,在roxygen2 中使用@rdname 可以更轻松地做到这一点:

#' @param object An object
#' @param data Numeric vector or data.frame
#' @param Fun Function. Default function is \code{sum}
#' @param ... Extra named arguments passed to FUN
#' @rdname myGeneric
#' @export 
setGeneric("myGeneric", function(object, data, FUN, ...)
           {standardGeneric ("myGeneric")} )

#' @rdname myGeneric
setMethod("myGeneric", c("numeric", "numeric", "missing"),
          function(object, data,...) { 
              myGeneric(object, data, sum,...) 
          })

#' @rdname myGeneric
setMethod("myGeneric", c("numeric", "data.frame", "missing"),
          function(object, data,...) { 
              myGeneric(object, as.vector(unlist(data), sum,...) 
          })

#' @rdname myGeneric
setMethod("myGeneric", c("numeric", "numeric", "function"),
          function(object, data, FUN,...) {
             ## Do something
          })

roxygen2 5.0.1 版对我有用吗

【讨论】:

  • 我相信@describeIn 现在需要第二个参数来提供描述,例如@describeIn myGeneric the method to do something different,见cran.r-project.org/web/packages/roxygen2/vignettes/rd.html
  • @cboettig 没错。您现在可以使用@rdname 指向要添加额外方法的Rd 文件。感谢您通知我,以便我更新信息
猜你喜欢
  • 2021-05-19
  • 2011-11-13
  • 2011-11-14
  • 2018-09-16
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
相关资源
最近更新 更多