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

12
例如,假设我有一个名为Test的包,我想要导出类A

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))

然而,在构建和加载之后,当使用A的生成器时,我遇到了以下错误:

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

我已经检查了我的NAMESPACE文件的内容是正确的:

exportClasses(A)
import(methods)

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


1
这个网址https://dev59.com/-1nUa4cB1Zd3GeqPaGqe有帮助吗? - Andrie
1
@Andrie - 并没有特别提到,因为那个问题详细讨论了文档标签,而不是为什么@export/@exportClass标签无法导出类生成器。 - mchen
你还需要使用 @export 来导出生成器。 - hadley
1个回答

14
如果您添加@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"

但只需添加导出即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接