【发布时间】:2011-11-14 03:49:04
【问题描述】:
对于使用 roxygen(2) 记录类,指定标题和描述/细节似乎与函数、方法、数据等相同。但是,槽和继承是它们自己的一种动物。在 roxygen2 中记录 S4 类的最佳实践是什么(当前的或计划的)?
尽职调查:
我发现在 roxygen 的早期描述中提到了 @slot 标签。
A 2008 R-forge mailing list post
似乎表明这已经死了,
并且 roxygen 中不支持@slot:
roxygen2 是这样吗?前面提到的帖子建议用户应该使用 LaTeX 标记制作自己的逐项列表。例如。扩展 "character" 类的新 S4 类将按如下方式编码和记录:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"),
contains = "character"
)
然而,虽然这可行,但这种用于记录插槽的 \describe 、\item 方法似乎与 roxygen(2) 的其余部分不一致,因为没有@-delimited 标签和插槽可能没有记录roxygenize() 没有异议。它也没有说明记录正在定义的类的继承的一致方式。我想依赖通常仍然可以使用@import 标记正常工作(如果特定插槽需要来自另一个包的非基类)。
所以,总而言之,roxygen(2) 插槽的当前最佳实践是什么?
目前似乎有三种选择:
- A -- 分项列表(如上例)。
- B --
@slot...但我错过了额外的标签/实现。我无法让@slot 在以下版本中使用 roxygen / roxygen2 它被包含在示例中作为逐项列表的替代品 更多。同样,上面的示例确实适用于 roxygen(2)。- C -- 一些用于指定槽的替代标签,如
@param,可以完成同样的事情。
我借用/扩展了我在githubroxygen2 开发页面上发布的帖子中的这个问题。
【问题讨论】:
-
@slot可能是你长期想要的,但它必须首先实现...... -
谢谢!很高兴知道。我很高兴我的代码中的
setClass语句比setMethod少得多。在@slot实施后进行更改不会太痛苦。 -
关于@slot的一些讨论:github.com/klutometis/roxygen/pull/85
-
现在 Roxygen2 版本 3 完全支持 S4 类(可在 github 获得)。