2009-08-30 5 views
7

調査データがあり、回答者の国別にグループ化した特定の変数のプロットを生成したいと思います。これまでにプロットを生成するために書いたコードは、foreach()とggplot2を取得するには

countries <- isplit(drones, drones$v3) 
foreach(country = countries) %dopar% { 
    png(file = paste(output.exp, "/Histogram of Job Satisfaction in ", country$key[[1]], ".png", sep = "")) 
    country.df <- data.frame(country) #ggplot2 doesn't appreciate the lists nextElem() produces 
    ggplot(country.df, aes(x = value.v51)) + geom_histogram() 
    dev.off() 
} 

本当に奇妙なものですか?私はisplit()を実行し、country <- nextElem(countries)を設定し、foreachラインを送信せずにコードを実行して素敵なプロットを得ることができます。 foreachを送信すると、空白の.pngファイルが取得されます。

ご協力いただきありがとうございます。

私は間違いなく標準Rループでこれを行うことができますが、実際にはforeachをよく理解したいと思います。あなたはディスプレイにそれをしたい場合は、プロットをprintする必要が

+0

サンプルデータを投稿できますか?テストするのがはるかに簡単になります。 –

+0

もちろん。正直なデータ:http://drop.io/cy81s4w/asset/sample-data-rdata –

+0

私は、実際のデータを使用するのは大丈夫だと思っていますが、少し珍しいですが、最も効率的です。 load(file.choose())を使ってそのデータをRに入力した後、drones < - sampleを入力するだけです。また、19の.pngファイルを表示するフォルダにoutput.expを設定する必要があります。 –

答えて

9

:デフォルトでは

print(ggplot(country.df, aes(x = value.v51)) + geom_histogram()) 

、ggplotコマンドは、プロットオブジェクトを返しますが、コマンド自体は、実際にプロットを表示しません。これはprintコマンドで行われます。対話的にコードを実行すると、コマンドの結果が表示されるので、明示的な印刷が必要ないことがよくあることに注意してください。しかし、foreachでラップすると、本文のコマンドの結果がエコーされないので、明示的に印刷する必要があります。

+8

また、 'ggsave'を使用してください。 – hadley

+0

ジョナサン、説明してくれてありがとうございます。ハドリー、ggsave()に言及してくれてありがとう - それはスムーズです。 –

関連する問題