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

Is there anyway to document S4 class and its constructor separately using Roxygen2

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

#' 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 编译包后。我有 2 个 .Rd 文件和 3 个帮助页面:

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

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

(我知道 Roxygen2 默认会为 S4 class 添加别名 class 名称。但是当我设置 @aliases NULL ,classA-class: This is the classA帮助页面消失了!!只剩下classA: This is the constructor)

两个帮助文件都出现在 class 文档下的原因是 setClass 总是使用 class 名称作为 class 的别名文档。此外,为 classA 定义的泛型 initialize 的方法指定 @rdname classA 指向 classA-method.

这里有两个解决方案:

首先,您可以简化 Roxygen2 header 代码并获得您想要的行为,但您需要使用 @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-class 页面,但对于构​​造函数,您将获得在 @rdname 之后使用的任何名称,例如?initializeClassA,如果这是你想要的。

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