如何使用Roxygen2适当地记录S4类?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (61)

对于用roxygen(2)编写的类,指定一个标题和描述/细节似乎与函数、方法、数据等相同,然而,插口和继承是它们自己的一种动物。在roxygen2中记录S4类的最佳实践是什么——当前的还是计划的?

我发现有人提到@slot标签在早期的roxygen2描述中。

roxygen2是这样的吗?例如,一个新的S4类,它扩展了"character"类的代码和文档如下:

#' 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)的其余部分不一致,因为没有@-分隔的标签和插槽可能没有文件记录,没有任何异议。roxygenize()它也没有提到一种一致的方法来记录所定义的类的继承。我设想依赖关系仍然正常工作(如果一个特定的插槽需要来自另一个包的非基类),则使用@import标签。

那么,概括地说,当前Roxygen(2)槽的最佳实践是什么?

有3种方案:

  • a-逐项列表(如上面的例子)。
  • B---@slot来实现额外的标签。
  • C--某些指定槽的替代标记,如@param,将完成相同的工作。
提问于
用户回答回答于

roxygen2v4.1+和Hadley的最新文档:

http://r-pkgs.had.co.nz/man.html#man-class

我还没有为RC试过它,但它现在对S4有效。

以前

看起来在ROxO 2版本3.0+下完全支持S4类插槽:

http://blog.rstudio.org/2013/12/09/roxygen2-3-0-0/

“用roxygen 2记录您的s4类、s4方法和rc类--可以安全地删除使用的解决方案。“

用户回答回答于

如果您想要在Rd文件中记录插槽,那么完全合适的解决方案是可以的。当使用roxygen2时,您可以使用标记@section来做基本相同的\描述。例如:

#' The EXAMPLE class
#'
#' This class contains an example. This line goes into the description
#'
#' This line and the next ones go into the details.
#' This line thus appears in the details as well.
#'
#'@section Slots: 
#'  \describe{
#'    \item{\code{slot1}:}{Matrix of class \code{"numeric"}, containing data from slot1}
#'    \item{\code{slot2}:}{Object of class \code{"character"}, containing data that needs to go in slot2.}
#'  }
#'
#' @note You can still add notes
#' @name EXAMPLE 
#' @rdname EXAMPLE
#' @aliases EXAMPLE-class
#' @exportClass EXAMPLE
#' @author Joris Meys
用户回答回答于

ROxy25.0.1的最新答案,版本5.0.1

对于S4,最好使用@slot标签:

#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' @slot myslot1 A logical keeping track of something.
#' @slot myslot2 An integer specifying something else.
#' @slot myslot3 A data.frame holding some data.
#'
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @export

这与槽的内部表示作为对象内部的列表是一致的。正如您所指出的,这种语法与其他行不同。

更新Roygen2 3.0.0的答案,当前为5.0.1。

对于S4,最佳做法是以下列形式编写文档:

#'  \section{Slots}{
#'    \describe{
#'      \item{\code{a}:}{Object of class \code{"numeric"}.}
#'      \item{\code{b}:}{Object of class \code{"character"}.}
#'    }
#'  }

所属标签

可能回答问题的人

  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问5 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问3 回答
  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问3 回答
  • 螃蟹居

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券