回答:
@suncoolsuの優れた応答に加えて、クリストフジェノリーニによるA(そうではない)S4の簡単な紹介があります。CRAN Webサイトで入手できます。
ハドリー・ウィッカムの「Advanced R」には、非常に優れたイントロとリファレンスがあります。インデックス作成を改善するために、このセクションを複製しています。
システムの選択
1つの言語では3つのOOシステムで十分ですが、ほとんどのRプログラミングではS3で十分です。Rでは、通常、print()、summary()、plot()などの既存の汎用関数のかなり単純なオブジェクトとメソッドを作成します。S3はこのタスクに非常に適しており、Rで記述したOOコードの大部分はS3です。S3は少し風変わりですが、最小限のコードで作業を完了できます。
相互に関連するオブジェクトのより複雑なシステムを作成する場合は、S4がより適切な場合があります。良い例は、Douglas BatesとMartin MaechlerによるMatrixパッケージです。多くの異なるタイプのスパース行列を効率的に保存および計算するように設計されています。バージョン1.1.3では、102クラスと20汎用関数を定義しています。パッケージはよく書かれており、コメントも付いています。付属のビネット(vignette( "Intro2Matrix"、package = "Matrix"))は、パッケージの構造の概要を示しています。S4は、生体物体間の複雑な相互関係をモデル化する必要があるBioconductorパッケージでも広く使用されています。バイオコンダクターは、S4を学習するための多くの優れたリソースを提供します。S3をマスターした場合、S4は比較的簡単に習得できます。アイデアはすべて同じですが、
主流のオブジェクト指向言語でプログラミングした場合、RCは非常に自然に見えるでしょう。しかし、それらは可変状態を介して副作用を引き起こす可能性があるため、理解が困難です。たとえば、Rで通常f(a、b)を呼び出す場合、aとbは変更されないと想定できます。ただし、aとbがRCオブジェクトである場合、それらはその場で変更される可能性があります。一般に、RCオブジェクトを使用するときは、副作用をできるだけ少なくし、変更可能な状態が絶対に必要な場合にのみ使用します。機能の大部分は依然として「機能的」であり、副作用がないはずです。これにより、コードの推論が容易になり、他のRプログラマーが理解しやすくなります。
彼は「S4プログラミングの実践的なチュートリアル」を参照しています。
彼の指針に従えば、他にも興味深いリソースがたくさんあります。
ジョンM.チェンバーズは、「オブジェクト指向プログラミング、関数型プログラミング、R」で次のように述べています。
Rは、関数型プログラミングの考え方、特に、関数型プログラミングとオブジェクト指向プログラミングを組み合わせたいという要望にも強く影響されています。
質問に直接関連するものではなく、同じアイデアに沿って「大規模データサイエンス向けSparkのデータフレーム」を追加します。これにより、ScalaとRがより緊密になるため、オブジェクト指向と機能の相乗効果が大きくなる可能性があります。