gpt4 book ai didi

r - 无论如何要使用 Roxygen2 分别记录 S4 类及其构造函数

转载 作者:行者123 更新时间:2023-12-01 02:11:03 25 4
gpt4 key购买 nike

我正在尝试用我自己的初始化方法设计一个 S4 类,并用 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:这是A类
  • A 类:这是 A 类
  • classA:这是构造函数

  • 两个 class?classA?classA将显示 classA-class帮助页面。这绝对是我想要的 class?classA将导致 classA-class: This is the classA?classA将导致 classA: This is the constructor .

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

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

    最佳答案

    两个帮助文件都出现在类文档下的原因是 setClass始终使用类名作为文档中类的别名。此外,您的通用方法 initializeclassA 定义指定 @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 的 A 类页面和 ?"classA-class"但是对于构造函数,你会得到你在 @rdname 之后使用的任何名称,例如 ?initializeClassA , 如果那是你想要的。

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

    关于r - 无论如何要使用 Roxygen2 分别记录 S4 类及其构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29325911/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com