是否有任何方法可以使用Roxygen2分别记录S4类及其构造函数的文档?

4

我想要设计一个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编译软件包后,我得到了2个.Rd文件和3个帮助页面:

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

无论是 class?classA 还是 ?classA 都会显示 classA-class 的帮助页面。这绝对是我的期望,因为我希望 class?classA 能够跳转至 classA-class:这是classA类 ,而 ?classA 能够跳转至 classA:这是构造函数

那么,我的问题在于如何使用Roxygen2将类文档和构造函数文档分开呢?

非常感谢您的帮助。

我知道Roxygen2默认会将S4类的别名与类名一起使用,但当我设置 @aliases NULL 时, classA-class:这是classA类 的帮助页面消失了!!只剩下了 classA:这是构造函数

1个回答

3
两个帮助文件都显示在类文档下的原因是setClass总是使用类名作为文档中该类的别名。此外,为classA定义的通用initialize方法的方法指定了@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-class页面,但对于构造函数,你会得到在@rdname之后使用的任何名称,例如?initializeClassA,如果这是你想要的。其次,我建议你不要使用initialize,而是使用new("classA", memberValue)创建classA的新实例。如果需要,你可以在类定义中定义原型以分配member的默认值和/或验证器函数。你真的需要一个单独的构造函数帮助页面吗?

非常感谢您提供的有用信息,肯恩。实际上,我正在尝试构建的S4类包含10个不同的插槽,并已经使用“prototype”为它们提供了默认值。问题是我的初始化方法是一个稍微复杂的函数,有数百行代码...这就是为什么我正在尝试将它们分开的原因。无论如何,正如您所说,最好将初始化方法和S4类的帮助页面合并在一起,或者为构造函数指定一个不同的名称。 - impromptu Rong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接