是否需要使用Roxygen2单独记录S4类及其构造函数
我试图用我自己的初始化方法设计一个S4类,并用Roxygen2单独记录它们。假设我的类定义为:是否需要使用Roxygen2单独记录S4类及其构造函数,r,s4,roxygen2,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")) 在使用Roxygen2编译包之后。
#' This is the classA
#' @name classA-class
#' @rdname classA-class
######## @aliases NULL
#' @exportClass classA
classA <- setClass(Class = "classA", slots = list(member = "ANY"))
在使用Roxygen2编译包之后。我得到了2.Rd文件和3个帮助页面:
- A班:这是A班
- classA:这是classA
- classA:这是构造函数
class?classA
和classA
都将显示classA class
帮助页面。这绝对是我想要的,因为我希望class?classA
将导致classA类:这是classA
,而?classA
将导致classA:这是构造函数
所以,我的问题是如何用Roxygen2分离类文档和构造函数文档?
非常感谢你的帮助
(我知道Roxygen2默认情况下会将别名与S4类的类名放在一起。但是当我设置
@aliases NULL
时,classA类:这是classA
帮助页消失了!!只剩下classA:这是构造函数
)两个帮助文件显示在类文档下的原因是setClass
始终使用类名作为文档中类的别名。此外,为classA
定义的泛型initialize
方法指定将其指向classA方法的@rdname classA
以下是两种解决方案:
首先,可以简化Roxygen2头代码并获得所需的行为,但需要使用@name
调用initialize方法,而不是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)
})
#'\code{classA}类定义
#'
#“@此处有此插槽的插槽成员说明
非常感谢你提供的有用信息,肯。实际上,我试图构建的S4类包含10个不同的插槽,我已经用“prototype”为它们提供了默认值。问题是我的初始化方法是一个有数百行的复杂函数。。。这就是为什么我要把它们分开。不管怎样,正如您所说,最好将初始化方法和S4类的帮助页面组合在一起,或者为构造函数指定一个不同的名称。
#' \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)
})