Ottenere foreach () e ggplot2 ad andare d'accordo
Domanda
Ho una serie di dati di rilievo, e mi piacerebbe per generare trame di una particolare variabile, raggruppati per paese del rispondente. Il codice che ho scritto per generare le trame finora è:
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()
}
La cosa veramente bizzarra? Posso eseguire l'isplit (), impostare country <- nextElem(countries)
, e quindi eseguire attraverso il codice senza inviare la linea foreach - e ottenere una trama bella. Se invio il foreach, ho alcuni file .png vuote.
Grazie in anticipo per il vostro aiuto.
posso sicuramente fare questo con lo standard R loop, ma mi piacerebbe davvero ottenere una migliore comprensione su foreach
.
Soluzione
È necessario print
la trama, se si vuole visualizzare:
print(ggplot(country.df, aes(x = value.v51)) + geom_histogram())
Per impostazione predefinita, i comandi ggplot restituire un oggetto trama, ma il comando stesso non visualizza la trama; che è fatto con il comando print
. Si noti che quando si esegue il codice in modo interattivo, risultati dei comandi vengono stampati è per questo che spesso non è necessario lo stampa esplicito. Ma quando avvolgendoli in un foreach
, è necessario stampare in modo esplicito dal momento che i risultati dei comandi nel corpo non sarà eco.