Rでクラスを作成したいのですが、S3またはS4クラスを使用する必要がありますか?
私はそれらについて多くの異なることを読みました、他のものより優れているものはありますか?
S3は最初の引数でのみディスパッチできますが、S4は複数の引数でディスパッチできます。クラスのオブジェクトまたはクラスとのオブジェクト、またはクラスとfoo
のオブジェクトが与えられた場合に異なることを行う関数のメソッドを記述できるようにしたい場合、S4はそのような複雑さを処理するためのはるかに優れた方法を提供します。"bar"
"bar"
"foobar"
"barfoo"
"foobar"
S3は非常にシンプルで実装が簡単ですが、実際には正式なオブジェクト指向システムではありません。その単純さは、クラスに属するオブジェクトが正しいコンポーネント/スロットなどを持つことを強制することを犠牲にしてもたらされます。S3を使用すると、次のようなことができます。class(obj) <- "lm"
メソッドディスパッチは"lm"
、渡されたときにクラスのメソッドを使用しますがobj
、obj
実際にクラスのオブジェクト"lm"
。
S3は、実装と文書化が簡単で、プログラマーの側で必要な追加の知識が少なくて済みます。
どちらを使用するかは、あなたが決めることができるものだけです。Doug Bates(2003)は、たとえば、新しいプロジェクトではS3ではなくS4を使用すると述べています。私はまだS3メソッド以外のものを使用する必要はありませんでした。
だから私は座って、あなたがそれらのクラスで操作したいクラスとメソッドの種類について考えます。必要な機能について考えてみてください。そうすれば、おそらくどちらかのシステムを指すことになります。
ダグラスベイツ。パッケージをS4に変換します。R News、3(1):6-8、2003年6月
参照クラスはどうですか?これはS3ではなく、S4の上に糖衣構文があると考える人もいますが、糖衣がたくさんあります。
簡単な例として、数か月前にここで尋ねた質問に対するこの回答を確認してください。
私はまだそのようなクラスのRdファイルを書く方法を見つけなければなりません。