12

例如,假设我调用了以下包Test并且我想导出类A

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

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

> library(Test)
> A()$foo(1)
Error: could not find function "A"

我检查了我的NAMESPACE文件的内容是好的:

exportClasses(A)
import(methods)

那么出了什么问题呢?为什么我的类生成器没有被导出?

4

1 回答 1

11

如果您添加@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))
    }
  )
)

重要提示:不要忘记A在导出指令中明确提及,否则它似乎不起作用,这与函数不同。

或者,当类导出时,您仍然可以通过 使用该类new(),例如

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

但只需添加导出很容易。

于 2014-05-06T14:43:32.163 回答