How to properly document S4 class slots using Roxygen2?

后端 未结 3 1690
予麋鹿
予麋鹿 2020-12-04 07:04

For documenting classes with roxygen(2), specifying a title and description/details appears to be the same as for functions, methods, data, etc. However, slots and inheritan

相关标签:
3条回答
  • 2020-12-04 07:41

    The solution provided by Full Decent is OK if you go for documenting slots in the Rd files itself. When using roxygen2, you can use the tag @section to do basically the same with \describe. An example:

    #' 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
    
    0 讨论(0)
  • 2020-12-04 07:47

    roxygen2 v4.1+ and Hadley's latest doc for doing this:

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

    I have not tried it yet for RC, but it works for me for S4 now.

    Previously

    It looks like S4 class slots are fully supported under Roxygen2 version 3.0+:

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

    "document your S4 classes, S4 methods and RC classes with roxygen2 – you can safely remove workarounds that used @alias and @usage, and simply rely on roxygen2 to do the right thing."

    0 讨论(0)
  • 2020-12-04 08:00

    Updated answer for Roxygen2 5.0.1, current as of 6.0.1

    For S4, the best practice now is documenting using the @slot tag:

    #' 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
    

    On a sidenote, @exportClass is only necessary in some cases, the general way to export a function is using @export now. You also don't have to export a class, unless you want other packages to be able to extend the class.

    See also http://r-pkgs.had.co.nz/namespace.html#exports

    Updated answer for Roygen2 3.0.0, current as of 5.0.1.

    For S4, the best practice is documentation in the form:

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

    This is consistent with the internal representation of slots as a list inside the object. As you point out, this syntax is different than other lines, and we may hope for a more robust solution in the future that incorporates knowledge of inheritance -- but today that does not exist.

    As pointed out by @Brian Diggs, this feature was pulled into 3.0.0, further discussion at https://github.com/klutometis/roxygen/pull/85

    0 讨论(0)
提交回复
热议问题