34

Henrik Bengtssonは、2002年にS3ジェネリックがすでに作成されているかどうかを気にすることなく、RでS3ジェネリックを作成する優れた方法をインターネットに提供しました。

彼の関数setGenericsS3が行うことは、基本的に次のとおりです。

  • 名前が正しいかどうかを確認します
  • その名前の関数があるかどうかを確認してください

もしそうなら、

  • ジェネリックかどうかを確認する
  • そうでない場合は、名前を.defaultに変更し、ジェネリックを作成します

そうでない場合は、ジェネリックを作成するだけです。

このコードは、独自のパッケージに利用可能なジェネリックがない場合にジェネリックを自動的に作成するのに非常に役立つことがわかりました。私たちはこのRの時代をかなり過ぎて移動したので、今Rで同じことを達成するための正しい方法は何であるか疑問に思いました。Rで、または同様の関数を見つけることができませんisS3Generic()。HenrikBengtssonのコードは、R2.14で導入された必須の名前空間よりずっと前からのものです。同じことを達成する他の方法を見たのを覚えていますが、それらを見つけることができません。

編集:私は特にS3を探しています。この関数isGeneric()はS4でのみ機能します。たとえば、anova(S3ジェネリック)の場合:

> isGeneric('anova')
[1] FALSE
> anova
function (object, ...) 
UseMethod("anova")
<bytecode: 0x04dc7a18>
<environment: namespace:stats>
4

1 に答える 1

1

パッケージisGenericS3の機能をご利用いただけます。R.methodsS3以下のコードを参照してください。

library(R.methodsS3)
isGenericS3(anova)
# [1] TRUE
于 2018-10-03T14:41:08.530 に答える