3

関数オブジェクトは、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`)

関数クラスのメソッドをエクスポートする適切な方法は何ですか?

4

1 に答える 1

1

R 拡張機能の記述セクション 1.5.2 によると、クラス関数のオブジェクトで動作する S3 メソッドを登録するときは、通常の引用符を使用する必要があります。

(関数名とクラス名は引用符で囲まれている可能性があることに注意してください。予約語と [<- や function などの非標準名は引用符で囲まれている必要があります。)

于 2015-11-22T20:26:23.300 に答える