2016-10-26 7 views
2

ggplot2プロット作成の一連の関数をパラメータ化して、冗長性を軽減したいと考えています。以下では、パラメータ化されていない関数とその試みをしていないような(そして動作する)ものがあります。関数をevalに返すパラメータ化関数を作成

私はキャプチャし、機能markvline()geom_vline()geom_text()にパラメータ値を渡すためにしようとしていますが、私は彼らが評価を受けることができるように、qplot()機能付きmarkvline()インラインを呼び出し、geom_vline() + geom_text()としてパラメータを返すようにしたいとやります最初の部分で行われていることと同じです。

私は、引用/評価/代替をもう少し良く理解する必要があると仮定しますが、この時点ではありません。私がどのようにmarkvline()geom_vline() + geom_text()コールと同等のものにするかについては、パラメータを記入していただきありがとうございます。

library(ggplot2) 

    ## This works 
    ## Making labeled vertical lines at 5 and 6 
qplot(Sepal.Length, Sepal.Width, data=iris) + 
    geom_vline(xintercept=5, color="red", size=1) + 
    geom_text(x=5, y=4, label="5", hjust=0) + 
    geom_vline(xintercept=6, color="red", size=1) + 
    geom_text(x=6, y=4, label="6", hjust=0) 


    ## I would like to parameterize these two statements 
markvline <- function(e) { 
    geom_vline(xintercept=e, color="red", size=1) + 
    geom_text(x=e, y=4, label=as.character(e), hjust=0)} 

    ## ... but this does not work 
qplot(Sepal.Length, Sepal.Width, data=iris) + 
    markvline(5) + 
    markvline(6) 

答えて

1

私が行うことができた最善をされています。リストには良いオプションです

markvline <- function(e) { 
    list(geom_vline(xintercept=e, color="red", size=1), 
     geom_text(x=e, y=4, label=as.character(e), hjust=0))} 

qplot(Sepal.Length, Sepal.Width, data=iris) + 
    markvline(5) + markvline(6) 
+1

、あなただけ 'qplot(Sepal.Length、がく片、独立の要素を追加する必要はありません。幅、データ=アイリス)+ markvline(5)+ markvline(6) ' – HubertL

+1

ありがとう!これが私に伝えている事の一つ(そして私の例からのエラーコードのいくつかは)評価された個々の関数を(あなたのためにリストに)返すことができますが、それらを+私の機能の中で。これは何とか 'geom_vline()'と 'geom_text()'は自分自身で '+'を組み合わせるのではなく、 'qplot()'が返すオブジェクトに何らかの形でフォールドする必要があるということを示唆しています。これは良いリードです!ありがとう。 – mpettis

+0

私が思ったよりも簡単でした。私は私の答えを編集します –

関連する問題