Roxygen2 - how to @export reference class generator?

package, r, reference-class, roxygen, roxygen2

Solution

If you add `@export A` then the generator function `A` will be exported, too, e.g.

#' A class description
#'
#' @import methods
#' @export A
#' @exportClass A
A = setRefClass('A',
  fields=list(name='character', n='numeric'),
  methods=list(
    hello=function() {
      "A greeting"
      return(paste0('Hello, ', name))
    }
  )
)

Important: Don't forget to explicitly mention `A` in the export directive or it doesn't appear to work, unlike for functions.

Alternatively, as the class is being exported, you can still use the class via `new()`, e.g.

> a = new('A', name='Josh', n=12345)
> a$hello()
 [1] "Hello, Josh"

but it's easy to just add the export.

Problem

For instance, say I have the following package called `Test` and I want to export class `A`: ``` # In /R/Test.R: #' @docType package #' @import methods #' @exportClass A A <- setRefClass("A", methods = list(foo = identity)) ``` However, after building and loading, I get the following error when using `A`'s generator: ``` > library(Test) > A()$foo(1) Error: could not find function "A" ``` I've checked the contents of my `NAMESPACE` file is fine: ``` exportClasses(A) import(methods) ``` So what's going wrong? Why isn't my class generator being exported?

Original source

Related problems