2017-12-06 6 views
1

私は1つの引数を必要とし、プロットを出力する関数を作成しました。引数には変数がy軸に文字としてプロットされます。ここではいくつかのサンプルデータは、次のとおりです。lapplyを介してggplot2のaes_string()に文字列を渡しても機能しません。

df_year <- data.frame(year = c(2000, 2001), V1 = c(1.7,2.6)) 
df_year_speaker <- data.frame(year = c(2000, 2000, 2001, 2001), 
           speaker = c("Smith", "House", "Smith", "House"), 
           V1 = c(1.5,2,2.3,3), 
           partyaffil = c("rep", "dem", "rep", "dem")) 

そして、ここに私のプロット機能:

require(ggplot2) 
plot_fct <- function(means_year = df_year, 
        means_year_speaker = df_year_speaker, 
        x="year", 
        y="V1"){ 
    ggplot()+ 
    scale_fill_manual(values = c("#778aff","#ff6f54"))+ #blue,red 
    geom_line(data = means_year, aes_string(x, y), 
       color = "#212121")+ 
    geom_point(data = means_year_speaker, aes_string(x, y))+ 
    geom_label(data = means_year_speaker, aes_string(x, y,label="speaker", 
                 fill = "partyaffil"), 
                 color = "#343434") 
} 

私が直接私の機能を実行すると、それだけで正常に動作します:

plot_fct(y = "V1") 

しかし、ときに私はそれを呼び出しますvia lapply私はエラーが発生します:

> lapply(list(A = "V1"), FUN = plot_fct) 
    Error: ggplot2 doesn't know how to deal with data of class character 

トレースバックを実行すると、エラーがfortify.default(data)であることが判明しました。 何が間違っているか、またはlapply経由で私の関数に文字列を渡す方法についてのアイデアはありますか?

+0

最初の引数として 'y'を使って関数' plot_fct'を再定義します。そして、lapplyは、最初の引数yには正しく、mean_yearでは正しく動作しません。 – Heikki

+0

あなたは本当に 'facet_grid'の後ろにいると思うでしょう。 – alistaire

+0

'facet_grid 'はセパラートプロットを生成できますか?私はこの関数で90以上の変数をプロットしたいので、それらをすべて1つにするとうまくいきません。 – user9015909

答えて

0

問題は、関数のどのパラメータをリストの単一の値に設定する必要があるのか​​不明であるということです。

あなたは

plot_fct <- function(y, means_year = df_year, 
       means_year_speaker = df_year_speaker, 
       x="year") 

に、yのデフォルトのパラメータを除去することにより、関数のシグネチャを変更した場合、それはあなたが意図したとおりに動作するはずです。

+0

ありがとうございます。私は実際にこのアイデアを持っていて、lapply(y = list(A = "V1")、FUN = plot_fct)でErrorを受け取った後、'lapply(y = list(A = "V1")、FUN = plot_fct) 引数 "X"がありません。既定値はありませんでした。これ以上追求しませんでした。 – user9015909

0

plot_fct(y = "V1")を呼び出すときは、特にパラメータにV1を渡していることに注意してください。 lapplyを使用する場合、デフォルトで最初のパラメータに移動し、yは最初のパラメータになりません。できること

lapply(list(A = "V1"), FUN = function(y) plot_fct(y=y)) 
+0

これはちょうど他の答えと同じくらいうまくいくが、フランクはほんの数秒で耳障りだった。ありがとうまだたくさん! – user9015909

関連する問題