无论如何使用Roxygen2分别记录S4类及其构造函数

时间:2015-03-29 05:22:21

标签: r s4 roxygen2

我正在尝试使用自己的初始化方法设计一个S4类,并使用Roxygen2单独记录它们。假设我的班级被定义为:

#' This is the classA
#' @name classA-class
#' @rdname classA-class
######## @aliases NULL
#' @exportClass classA
classA <- setClass(Class = "classA", slots = list(member = "ANY"))

使用初始化方法:

#' This is the constructor
#' @name classA
#' @rdname classA
#' @export classA
setMethod("initialize", "classA", function(.Object, x) {
             .Object@member = x
             return(.Object)
         })

用Roxygen2编译包后。我有3个帮助页面获得2个.Rd文件:

  • classA-class:这是classA
  • classA:这是classA
  • classA:这是构造函数

class?classA?classA都会显示classA-class帮助页面。这绝对是我想要的,因为我希望class?classA导致classA-class: This is the classA ?classA导致classA: This is the constructor

所以,我的问题是如何将类文档和构造函数文档与Roxygen2分开? 非常感谢你的帮助。

我知道Roxygen2默认会为别名添加带有类名的别名。但是当我设置 @aliases NULL时, {{1} } 帮助页面消失了!!只留下了 classA-class: This is the classA

1 个答案:

答案 0 :(得分:3)

两个帮助文件在类文档下显示的原因是setClass始终使用类名作为文档中类的别名。此外,针对initialize定义的通用classA的方法指定@rdname classA,并将其指向classA-method

以下是两个解决方案:

首先,您可以简化Roxygen2标头代码并获得所需的行为,但您需要使用@name来调用初始化方法,而不是classA

#' \code{classA} class definition
#'
#' @slot member description of this slot here
classA <- setClass(Class = "classA", slots = list(member = "ANY"))    

#' constructor for \link{classA-class}
#' 
#' This is the constructor.
#' @name initializeClassA
#' @export
setMethod("initialize", "classA", function(.Object, x) {
    .Object@member = x
    return(.Object)
})

这为您提供了?classA?"classA-class"的classA级页面,但对于构​​造函数,您可以获得@rdname后使用的任何名称,例如?initializeClassA,如果那是你想要的。

其次,我建议您根本不使用initialize,而是使用classA创建new("classA", memberValue)的新实例。您可以在类定义中定义原型,以便根据需要分配默认值member和/或验证器函数。你真的需要一个单独的构造函数帮助页面吗?