例如,假设我有以下名为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)
那么出了什么问题?为什么我的类生成器不会被导出?
答案 0 :(得分: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))
}
)
)
重要提示:不要忘记在导出指令中明确提及A
,或者与功能不同,它似乎不起作用。
或者,当 类被导出时,您仍然可以通过new()
使用该类,例如
> a = new('A', name='Josh', n=12345)
> a$hello()
[1] "Hello, Josh"
但是添加导出很容易。