2016-11-16 6 views
2

私はmagrittrのパイプでggplotオブジェクトに定義されたカスタム関数を使いたいと思います。しかし、私はggplotオブジェクトをこの関数に渡すことはできません。ここでggplotオブジェクトをパイプ転送する方法は?

は簡単な例です:

library(ggplot2) 
library(magrittr) 

my_plot_function <- function(plot) { 
    plot + geom_hline(yintercept = 3, linetype = 'dashed') 
} 

data(mtcars) 
p <- mtcars %>% 
    ggplot() + 
    geom_point(aes(mpg, wt)) 
my_plot_function(p) 

次のように私はチェーン内my_plot_function()を使用することができればそれは素晴らしいことだ:

mtcars %>% 
    ggplot() + 
    geom_point(aes(mpg, wt)) %>% 
    my_plot_function() 

はしかし、それは唯一とエラーになりますレイヤーはプロット自体の代わりにmy_plot_function()に渡されます。どのように私はパイプでプロットを渡すことができますか?

+0

ので、この作業を行うための唯一の方法は、 '%>%' sの中括弧の間ggplottingのものを置くことです。しかし、それはおそらくあなたが望むものではありません。 –

+0

@KonradRudolphあなたは 'mtcars%>%(ggplot()+ geom_point(aes(mpg、wt)))%>%my_plot_function()'を意味しますか?それは動作していないようです。 – janosdivenyi

+0

私は最初のコメントの記述が間違っていたので、あなたはあなたのコードを暗示していましたが、あなたは '(mtcars%>%ggplot()+ geom_point(aes(mpg、wt)))%>%my_plot_function()書きました。 –

答えて

3

プロットオブジェクトを想定しない関数を定義し、通常のように追加することができます(ggplot)。あなたがRで、演算子の優先順位を変更することはできません

my_plot_function <- function() { 
    geom_hline(yintercept = 3, linetype = 'dashed') 
} 


mtcars %>% 
    ggplot() + 
    geom_point(aes(mpg, wt)) + my_plot_function() 
+0

ああ、私は解決策がとてもシンプルであるとは思っていませんでした:) – janosdivenyi

+1

geomや他のggplot関数のリストを返すことで、my_plot()から複数のgeomを持つことさえできます。 –

関連する問題