Obtendo foreach () e ggplot2 para se dar bem
Pergunta
Eu tenho um conjunto de dados da pesquisa e gostaria de gerar gráficos de uma variável específica, agrupada pelo país do entrevistado. O código que escrevi para gerar as parcelas até agora é:
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()
}
A coisa verdadeiramente bizarra? Eu posso executar o isPlit (), definido country <- nextElem(countries)
, e depois corra o código sem enviar a linha do foreach - e obtenha um enredo adorável. Se eu enviar o foreach, recebo alguns arquivos .png em branco.
Agradeço antecipadamente por sua ajuda.
Definitivamente, posso fazer isso com loops R padrão, mas eu realmente gostaria de entender melhor foreach
.
Solução
Você precisa print
O enredo se você quiser exibir:
print(ggplot(country.df, aes(x = value.v51)) + geom_histogram())
Por padrão, os comandos GGPlot retornam um objeto de plotagem, mas o próprio comando não exibe o gráfico; Isso é feito com o print
comando. Observe que, quando você executa o código interativamente, os resultados dos comandos são impressos, e é por isso que você geralmente não precisa da impressão explícita. Mas ao embrulhar em um foreach
, você precisa imprimir explicitamente, pois os resultados dos comandos no corpo não serão ecoados.