导出'功能的S3方法'类对象

时间:2015-11-21 14:09:18

标签: r devtools r-package r-s3

函数对象似乎适用于调度S3方法 但由于某种原因,它们无法在NAMESPACE文件中导出。

下面的代码适用于调度到*.function方法:

as.abc = function(x, ...){
    UseMethod("as.abc")
}
as.abc.list = function(x, ...){
    stopifnot(is.list(x))
    structure(x, class="abc")
}
as.abc.function = function(x, ...){
    stopifnot(is.function(x))
    structure(x, class="abc")
}
# list
l = as.abc(list(1))
str(l)
#List of 1
# $ : num 1
# - attr(*, "class")= chr "abc"

# function
f = as.abc(function(x) x)
str(f)
#function (x)  
# - attr(*, "srcref")=Class 'srcref'  atomic [1:8] 1 12 1 24 12 24 1 1
# .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile' <environment: 0x3dbb848> 
# - attr(*, "class")= chr "abc"

但是当我尝试将NAMESPACE中的导出定义为:

export(as.abc)
S3method(as.abc, list)
S3method(as.abc, function)

R CMD检查时抛出错误:

* checking package namespace information ... ERROR
Invalid NAMESPACE file, parsing gives:
Error in parse(nsFile, keep.source = FALSE, srcfile = NULL): 29:26: unexpected ')'
28: S3method(as.abc, list)
29: S3method(as.abc, function)

我还尝试包裹`,但它也没有帮助

S3method(as.abc, `function`)

为函数类导出方法的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据Writing R Extensions第1.5.2节,在注册处理类函数对象的S3方法时,必须使用常规引号:

  

(注意,可以引用函数和类名,保留字和非标准名称,例如[&lt; - 和函数必须是。)