Rのオブジェクト指向について。細かい表現(=
が入るかどうかなど)についてはリンク先で確認する。
基本(文法)
- S3、S4: Rのオブジェクト指向プログラミング(S3とS4クラス) - 忘れないようにメモっとく
- S4: S4クラス | setClass関数を利用してRのS4クラスを定義する方法
- setClass関数の第2引数はrepresentationという関数でメンバを定義
- 第3引数はprototype関数で初期値を設定
- メンバ変数には
@
でアクセス
S3、S4クラスはメンバ関数が定義できない。ただRは.
が名前に使えるのでそれで代替する(実際ジェネリック関数はplot.dogなどのように定義出来る)。
- R5: R5クラス | 参照渡しを実現する,リファレンス,ポインター
- setRefClass関数を使って宣言する。メンバ変数だけでなく、メンバ関数も定義できる
- メンバ変数、関数はlistで宣言
- コンストラクタを明示的に定義するならメンバ関数にinitialize関数を定義する
<<-
は永続代入でグローバル変数に代入(http://cse.naro.affrc.go.jp/takezawa/r-tips/r/32.html)- Animal$newとしてインスタンス生成
- 通常の代入だと参照しか渡されないのでコピーするときはcopy関数を使う
- R6: Rでオブジェクト指向っぽくクラスを使ってみる(R6メソッド) - Qiita
- library(R6)としてから利用
- private、publicの区別が出来る
R5、R6オブジェクトは普通のオブジェクト指向言語のものと同様の機能がある。
発展
- https://google.github.io/styleguide/Rguide.xmlにはS4クラス使うな、とある。APIが違うと使いにくいのでS3で統一したほうが良いと自分も思う。
- そもそもS3クラスの機能は少ないのでryamadaのコンピュータ・数学メモのように、listを使うのは合理的だと思う
- S4 クラスとメソッド入門 - RjpWiki
- データ解析言語Rによる統計的プログラミング: 第 3 回 再利用可能なオブジェクト指向プログラミング