2016-11-17 6 views
6

私は棒グラフをプロットする関数を書いています。しかし、私がファセットラップになると、「〜」記号が物事を困難にしています。関数内にfacet_wrap(ggplot2)を書く方法

rf.funct <- function(dat, predictor, feature){ 
    ggplot(get(dat), aes(get(predictor), N)) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(get(~feature)) # this is where the problem is 
} 

私は次のことを試してみた:

facet_wrap((get(~feature))) # invalid first argument 
facet_wrap(paste0("~ ", get(feature))) # object 'feature' not found 

は、どのように私は必ず「〜」記号が関数に含まれます作るのですか?

+0

機能は文字列か? – JasonWang

+1

コードから 'get'を削除するとどうなりますか? –

+1

'facet_wrap(paste("〜 "、feature))'。そして、@ JakeKauppが言ったように、 'get'のすべてのインスタンスを取り除きます。 – eipi10

答えて

6

getを使用する必要はありません。 dat引数を使用してデータフレームを関数に渡したので、datをggplotに送り、その環境内からデータデータを取得します。

rf.funct <- function(dat, predictor, feature) { 
    ggplot(dat, aes_string(predictor, "N")) + 
    geom_bar(stat = 'identity') + 
    facet_wrap(feature) 
} 

predictorfeature引数は文字列として入力する必要があります。次に、aes_stringを使用して美学を指定することができます。 facet_wrapは、式を必要とせずに文字ベクトルを直接取得できるようになりました(@WeihuangWongによって指摘されています)。

+1

ggplot 2.1.0では、 'facets'引数は "式か文字ベクトルのいずれかです"片方の式'〜a + b 'または文字ベクトル' c( "a"、 "b ") '。" OPが最近のバージョンのggplotを使用していると、 'paste(...)'が重複する可能性があります。 –

+0

ggplotコードの上にいくつかのdata.tableコードが含まれていたため、get()を使用していました。私はggplotセクションにget()を使う必要はないことを理解しています、ありがとうございます! – ant

+0

ありがとう@WeihuangWong。私はそれに応じて私の答えを更新しました。 – eipi10

関連する問題