関数オブジェクトは、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 を次のように定義しようとすると:
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`)
関数クラスのメソッドをエクスポートする適切な方法は何ですか?