Получение 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, я получу несколько пустых файлов в формате png.
Заранее благодарю за вашу помощь.
Я определенно могу сделать это со стандартными циклами R, но мне бы действительно хотелось лучше разобраться в foreach
.
Решение
Тебе нужно print
график, если вы хотите, чтобы он отображался:
print(ggplot(country.df, aes(x = value.v51)) + geom_histogram())
По умолчанию команды ggplot возвращают объект plot, но сама команда фактически не отображает график;это делается с помощью print
команда.Обратите внимание, что когда вы запускаете код в интерактивном режиме, результаты команд печатаются, поэтому вам часто не нужна явная печать.Но когда заворачиваешь в foreach
, вам необходимо явно напечатать, так как результаты выполнения команд в теле не будут повторены.