60

Rでクラスを作成したいのですが、S3またはS4クラスを使用する必要がありますか?

私はそれらについて多くの異なることを読みました、他のものより優れているものはありますか?

4

2 に答える 2

66

S3は最初の引数でのみディスパッチできますが、S4は複数の引数でディスパッチできます。クラスのオブジェクトまたはクラスとのオブジェクト、またはクラスfooのオブジェクトが与えられた場合に異なることを行う関数のメソッドを記述できるようにしたい場合、S4はそのような複雑さを処理するためのはるかに優れた方法を提供します。"bar""bar" "foobar""barfoo""foobar"

S3は非常にシンプルで実装が簡単ですが、実際には正式なオブジェクト指向システムではありません。その単純さは、クラスに属するオブジェクトが正しいコンポーネント/スロットなどを持つことを強制することを犠牲にしてもたらされます。S3を使用すると、次のようなことができます。class(obj) <- "lm"メソッドディスパッチは"lm"、渡されたときにクラスのメソッドを使用しますがobjobj実際にクラスのオブジェクト"lm"

S3は、実装と文書化が簡単で、プログラマーの側で必要な追加の知識が少なくて済みます。

どちらを使用するかは、あなたが決めることができるものだけです。Doug Bates(2003)は、たとえば、新しいプロジェクトではS3ではなくS4を使用すると述べています。私はまだS3メソッド以外のものを使用する必要はありませんでした。

だから私は座って、あなたがそれらのクラスで操作したいクラスとメソッドの種類について考えます。必要な機能について考えてみてください。そうすれば、おそらくどちらかのシステムを指すことになります。

ダグラスベイツ。パッケージをS4に変換します。R News、3(1):6-8、2003年6月

于 2011-06-23T08:27:55.357 に答える
10

参照クラスはどうですか?これはS3ではなく、S4の上に糖衣構文があると考える人もいますが、糖衣がたくさんあります。

簡単な例として、数か月前にここで尋ねた質問に対するこの回答を確認してください。

私はまだそのようなクラスのRdファイルを書く方法を見つけなければなりません。

于 2011-07-20T07:31:39.100 に答える