我正在尝试使用自己的初始化方法设计一个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文件:
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
)
答案 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
和/或验证器函数。你真的需要一个单独的构造函数帮助页面吗?