2016-11-06 18 views
4

+は、数字以外のものが提供されると、通常non-numeric argument to binary operatorを投げます。しかし、ggplot2と一緒にプロットを一緒に貼り付けます。同時に、通常の関数をggplot2のコンテキストの外で(たとえば、算術演算子または数式演算子として)保持しているため、ggplot2バージョンはこれらのいずれとも矛盾しません。ggplot2 plus演算子はどのように定義されていますか?

+をこのように動作させる方法を理解したいと思います。 ggplot2 github repoをブラウズすると、+.gg%+%の関数定義が見つかりましたが、私にとって明らかになったことはありませんでした。

これを行うggplot2パッケージのコードへのポインタ、またはこれがどのように行われているのかに関する一般的な説明がうれしいです。

答えて

5

あなたが+.ggを解剖した場合、我々は持っている:以外

> ggplot2:::`+.gg` 
function (e1, e2) 
{ 
    e2name <- deparse(substitute(e2)) 
    if (is.theme(e1)) 
    add_theme(e1, e2, e2name) 
    else if (is.ggplot(e1)) 
    add_ggplot(e1, e2, e2name) 
} 

add_themeを、あなたが興味を持っていることはggplot2:::add_ggplotにアクセスすることができますadd_ggplotされています。後者は、非常に整理された長い関数ですが、追加しようとしているものをディスパッチするためのより多くの「カスケード」機能を示しています。

これは、適用する機能を持つクラスggのオブジェクト(「S3 classes」のため)に「+」を使用すると「認識」しています。あなたはggplot2 GitHub reposの開始点をggproto.Rに見つけることができます。これはほとんどの場合、ggplot2の動作が依存しています。

これはあなたが探しているものですか?

+0

ありがとうございました。私には分かりませんが、関数の名前は '+ .gg 'ですが、' + .gg'は使わないので、単純な '+'を使います。 Rが '+ .gg 'を呼び出す方法を知っていますか? – jakub

+1

それは[S3クラス](http://adv-r.had.co.nz/S3.html)のためです。 Rの中の関数呼び出し( '' '(引用符付き)を試してください)では、' 'ggplot2'は単に' + 'メソッドを' gg'クラスのオブジェクトに拡張します。 –

+0

うーん、そこに '.'を見て、これは正しい方向に私を指摘しているはずです!クラスの定義がggplot2リポジトリのどこにあるのか知りたいですか? – jakub

関連する問題