无论如何使用 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 个帮助页面:
- classA-class:这是classA
- classA:这是classA
- class答:这是构造函数
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 验证器函数。您真的需要构造函数的单独帮助页面吗?
我正在尝试用我自己的初始化方法设计一个 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 个帮助页面:
- classA-class:这是classA
- classA:这是classA
- class答:这是构造函数
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 验证器函数。您真的需要构造函数的单独帮助页面吗?