2009-08-30 51 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一個更好的把握。

+0

你能發佈一些示例數據?這會讓測試變得更容易。 –

+0

當然。誠實善良的數據:http://drop.io/cy81s4w/asset/sample-data-rdata –

+0

我希望使用實際的數據是好的 - 有點不尋常,但它似乎是最有效的。只需使用load(file.choose())將該數據輸入到R中,然後使用無人機< - 樣本。你還需要將output.exp設置爲你想要顯示19個.png文件的文件夾。 –

回答

9

你需要,如果你想讓它顯示給print情節:

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

默認情況下,ggplot命令返回一個情節對象,但該命令本身並不實際顯示的情節;這是通過print命令完成的。請注意,當您以交互方式運行代碼時,命令的結果將被打印出來,這就是爲什麼您通常不需要顯式打印的原因。但是當包裝在foreach中時,您需要明確打印,因爲正文中的命令結果不會被回顯。

+8

或者,使用'ggsave' – hadley

+0

喬納森,謝謝你的解釋 - 這也可能會在未來幫助我避免混淆。哈德利,感謝提及(呃,寫作)ggsave() - 它很流暢。 –