Roxygen2 - 如何@export引用类生成器?

mch*_*hen 10 r package roxygen reference-class roxygen2

例如,假设我有以下包调用Test,我想导出类A:

# In /R/Test.R:
#' @docType package
#' @import methods
#' @exportClass A
A <- setRefClass("A", methods = list(foo = identity))
Run Code Online (Sandbox Code Playgroud)

但是,在构建和加载后,使用A的生成器时出现以下错误:

> library(Test)
> A()$foo(1)
Error: could not find function "A"
Run Code Online (Sandbox Code Playgroud)

我检查过我的NAMESPACE文件内容很好:

exportClasses(A)
import(methods)
Run Code Online (Sandbox Code Playgroud)

出了什么问题?为什么不导出我的类生成器?

Jos*_*ode 10

如果你添加,@export A那么A也会导出生成器函数,例如

#' 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))
    }
  )
)
Run Code Online (Sandbox Code Playgroud)

重要提示:不要忘记A在export指令中明确提及或者它似乎不起作用,与函数不同.

另外,作为类用于出口,你仍然可以通过使用类new(),如

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

但是添加导出很容易.