gpt4 book ai didi

r - 为 'function' 类对象导出 S3 方法

转载 作者:行者123 更新时间:2023-12-02 03:20:31 26 4
gpt4 key购买 nike

函数对象似乎可以很好地处理 S3 方法的调度。
但出于某种原因,它们无法导出到 NAMESPACE 文件中。

下面的代码适用于分派(dispatch)到 *.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`)

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

最佳答案

根据 Writing R Extensions 1.5.2 节,在注册作用于类函数对象的 S3 方法时必须使用正则引号:

(Note that function and class names may be quoted, and reserved words and non-standard names such as [<- and function must be.)

关于r - 为 'function' 类对象导出 S3 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com