qed
qed

Reputation: 23114

Document reference class and its methods with roxygen2

I am trying to document a reference class with roxygen2:

#' test class
#' 
#' @name myclass
#' @export 
#' @field x A number
#' @field y A number
#' @method print Print x and y
myclass = setRefClass("myclass",
                      fields = list(
                          x = "numeric",
                          y = "numeric"
                      ))


myclass$methods(
    print = function() {
        if (.self$x > 10) {
            stop("x is too large!")
        }
        message(paste("x: ", .self$x))
        message(paste("y: ", .self$y))
    }
)

myclass$methods(
    initialize = function(x=NULL, y=NULL, obj=NULL) {
        if(is.null(obj)) {
            .self$x = x
            .self$y = y
        }
        else {
            .self$x = obj$x
            .self$y = obj$y
        }
    }
)

Result of ?myclass:

test class

Description

test class

Fields

x
A number

y
A number

I have 4 questions:


I also tried this:

myclass$methods(
#' Print two numbers
#' 
#' @param msg A message to prepend
    print = function(msg) {
        if (.self$x > 10) {
            stop("x is too large!")
        }
        message(paste(msg, .self$x))
        message(paste(msg, .self$y))
    }
)

And got this:

> ?myclass$print
Error in .helpForCall(topicExpr, parent.frame()) : 
  no documentation for function ‘$’ and signature ‘x = "refObjectGenerator"’

Another try:

#' test class
#' 
#' @name myclass
#' @export 
#' @field x A number
#' @field y A number
#' @method print Print two numbers
#' @method initialize Initialize the class
myclass = setRefClass("myclass",
                      fields = list(
                          x = "numeric",
                          y = "numeric"
                      ), 
                      methods = list(
                          print = function(msg) {
                              if (.self$x > 10) {
                                  stop("x is too large!")
                              }
                              message(paste(msg, .self$x))
                              message(paste(msg, .self$y))
                          },
                          initialize = function(x=NULL, y=NULL, obj=NULL) {
                              if(is.null(obj)) {
                                  .self$x = x
                                  .self$y = y
                              }
                              else {
                                  .self$x = obj$x
                                  .self$y = obj$y
                              }
                          }
                      )
)

Still no luck.

Upvotes: 3

Views: 782

Answers (1)

Ryan Hope
Ryan Hope

Reputation: 512

In the case of reference classes I am pretty sure @export will expose the generator function returned by setRefClass and @exportClass will expose the actual class.

Upvotes: 1

Related Questions