2009-08-30 5 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에 입력 한 다음 drones <- sample로 입력하면됩니다. 또한 19 개의 .png 파일을 표시 할 폴더에 output.exp를 설정해야합니다. –

답변

9

당신은 당신이 디스플레이를 원하는 경우 플롯을 print해야합니다

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

는 기본적으로 ggplot 명령은 플롯 객체하지만 실제로 플롯을 표시하지 않는 명령 자체를 반환

; 이것은 print 명령으로 수행됩니다. 대화식으로 코드를 실행하면 명령 결과가 인쇄되므로 명시 적 인쇄가 필요하지 않은 경우가 많습니다. 그러나 foreach으로 래핑 할 때 본문의 명령 결과가 표시되지 않으므로 명시 적으로 인쇄해야합니다.

+8

또는 ggsave를 사용하십시오. – hadley

+0

Jonathan, 설명해 주셔서 감사합니다. 장래에 나 혼란을 피할 수 있습니다. 해들리, ggsave()에 대해 언급 해 주셔서 감사합니다 (부드러운). –

관련 문제