【问题标题】:Roxygen2 - how to @export reference class generator?Roxygen2 - 如何@export 参考类生成器?
【发布时间】:2014-02-03 16:21:55
【问题描述】:

例如,假设我有以下名为 Test 的包,我想导出类 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)

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

【问题讨论】:

  • @Andrie - 不是特别的,因为这个问题详细讨论了文档标签,而不是为什么 @export/@exportClass 标签无法导出类生成器。
  • 您还需要@export 才能导出生成器。

标签: r package roxygen2 reference-class roxygen


【解决方案1】:

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

但是添加导出很容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2015-07-06
    • 2014-05-04
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多