このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

ggplot2とproto

ggplot2内でprotoを使っているが、protoの有効範囲はggplot2の名前空間内に閉じ込められているようだ。require(proto)すると事情が違ってくる。

protoパッケージをロードしている状態だと、protoオブジェクトxに対して x$class()関数が使えるようになる。仮想的なメンバが追加されるようだ。

これは、protoパッケージが、"$"汎用関数のメソッドである"$.proto"関数を定義していたのだった。$も組み込みではなくてユーザー定義だった(忘れていた)。これを使って仮想的なメンバーを定義できるわけだ。なるほど。

ggplotオブジェクトはS3オブジェクトだが、scalesメンバーはR5らしい。modeでは"S4"と出るが、printするとreference classと出るのでR5なのだろう。R5クラスのメンバーアクセスは"$"となる。x$getClass() でクラス情報を得られる。そのクラス情報は、なんとS4オブジェクトらしい。

S4オブジェクトの構造を参照するには str(object) とする。R5オブジェクトでも str(object) は使える。