2013-04-30 1 views
10

ggplot2を別の関数にラップする必要があります。受け入れられるのと同じ方法で変数を解析できるようにするために、正しい方向に私を導くことができます。ラッパーでggplotに引数を渡す

たとえば、以下のMWEを考慮します。

#Load Required libraries. 
library(ggplot2) 

##My Wrapper Function. 
mywrapper <- function(data,xcol,ycol,colorVar){ 
    writeLines("This is my wrapper") 
    plot <- ggplot(data=data,aes(x=xcol,y=ycol,color=colorVar)) + geom_point() 
    print(plot) 
    return(plot) 
} 

ダミーデータ:

##Demo Data 
myData <- data.frame(x=0,y=0,c="Color Series") 

手間をかけずに実行し、既存の使用法:

##Example of Original Function Usage, which executes as expected 
plot <- ggplot(data=myData,aes(x=x,y=y,color=c)) + geom_point() 
print(plot) 

客観的用法構文:

##Example of Intended Usage, which Throws Error ----- "object 'xcol' not found" 
mywrapper(data=myData,xcol=x,ycol=y,colorVar=c) 

上記は、ggplot2パッケージの「オリジナル」使用の例と、別の関数でどのようにまとめたいかを示しています。ただし、ラッパーはエラーをスローします。

私は、これは他の多くのアプリケーションに適用されると確信している、そしてそれはおそらく千回に答えてきた、しかし、私はここでの問題は、そのggplotであるR.

答えて

9

内で何この主題は「と呼ばれる」はわかりませんデータオブジェクトにxcolという名前のcolumnを探します。いくつかの発言

mywrapper <- function(data,xcol,ycol,colorVar){ 
    writeLines("This is my wrapper") 
    plot <- ggplot(data=data, aes_string(x = xcol, y = ycol, color = colorVar)) + geom_point() 
    print(plot) 
    return(plot) 
} 

を::

    mywrapper(data = "myData", xcol = "x", ycol = "y", colorVar = "c") 
    

    し、それに応じてあなたのラッパーを変更します。私は、例えば、aes_stringを使用して、文字列を使用してマッピングしたい列名を渡すに切り替えることをお勧めします

  1. 個人的な好み、私は周りに多くのスペースを使用します。 x = 1、私にとってこれは読みやすさを大幅に改善します。スペースがなければ、コードは大きなブロックのように見えます。
  2. プロットを関数の外に戻すと、関数内ではなく関数の外に出力されます。
+0

ありがとう、aes_stringオプションがあることを知らなかったが、 '名前'を渡す方法がない、つまり、ggplot2関数が引数の意味をどのように知っているかを示している。 –

+0

オブジェクトの名前を取得する方法はありますが、ggplot2は 'aes'のフードの中でそれを使用しますが、このような引数を渡すためには' aes_string'がはるかに簡単です。 –

+0

こんにちは、これは非常に便利な答えです。私はヒストグラムのラッパーを開発するためにこのソリューションを使用しています。しかし、私のコードでは、 'geom_vline(aes(xintercept = mean(histogramVariable))、color = 'red''という中央値ラインを生成するコードがあります。 – Konrad