2009-08-30 9 views
7

Mam zestaw danych ankietowych i chcę wygenerować wykresy konkretnej zmiennej pogrupowane według kraju respondenta. Kod, który napisałem do generowania działek do tej pory, to:Uzyskiwanie foreach() i ggplot2, aby się dogadać

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() 
} 

Naprawdę dziwaczna rzecz? Mogę uruchomić isplit(), ustawić country <- nextElem(countries), a następnie uruchomić kod bez wysyłania linii foreach - i uzyskać ładną fabułę. Jeśli wyślę foreach, otrzymam puste pliki .png.

Z góry dziękuję za pomoc.

Zdecydowanie mogę to zrobić ze standardowymi pętlami R, ale naprawdę chciałbym lepiej zrozumieć foreach.

+0

Czy możesz zamieścić kilka przykładowych danych? To znacznie ułatwiłoby testowanie. –

+0

Oczywiście. Dane szczerego do dobrego: http://drop.io/cy81s4w/asset/sample-data-rdata –

+0

Mam nadzieję, że wykorzystanie rzeczywistych danych jest w porządku - trochę niezwykłe, ale wydaje się najbardziej wydajne. Wystarczy użyć load (file.choose()), aby wprowadzić dane do R, a następnie drony <- sample. Musisz także ustawić output.exp w folderze, w którym chcesz pokazać 19 plików .png. –

Odpowiedz

9

Trzeba print działkę jeśli chcesz wyświetlić:

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

Domyślnie polecenia ggplot zwraca obiekt wykresu ale polecenie samej rzeczywistości nie wyświetlić wykres; odbywa się to za pomocą polecenia print. Zauważ, że po uruchomieniu kodu interaktywnie, wyniki poleceń są drukowane, dlatego często nie potrzebujesz wyraźnego druku. Ale podczas zawijania w foreach, musisz jawnie drukować, ponieważ wyniki poleceń w treści nie będą echo.

+8

Alternatywnie, użyj 'ggsave' – hadley

+0

Jonathan, dziękuję za wyjaśnienie - to prawdopodobnie uratuje mnie również w przyszłości. Hadley, dzięki za wzmiankę (uh, i pisanie) ggsave() - jest gładka. –