2014-06-08 4 views
0

forloop을 사용하여 다수의 빈 플롯을 자동 생성하여 LaTeX 문서로 출력하려고합니다. 빈 플롯을 성공적으로 생성하는 데이터 프레임으로 시작하여 아래 코드를 사용하고 있습니다. 그 의도는 문서에 연속 된 beanplot을 출력하는 것입니다. 나는 원하는 각각의 플롯에 대해 beanplot 명령을 작성하여이 작업을 수행 할 수 있지만, for 루프로 수행 할 수 있다면 훨씬 더 좋을 것입니다. 그러나 forloop을 사용하려고 할 때, 9 개의 플롯을 출력하는 대신 마지막 플롯 만 출력합니다. 왜 이것에 대한 아이디어가 있습니까? fig.keep = 'all'과 plot.new()를 사용해 보았습니다. 어느 쪽도 도움이되지 않았습니다. Sweave로 컴파일하기. 감사!LaTeX로 forloop에서 빈 플롯 생성하기

<<beanplots,fig.keep='all'>>= 
#fig.keep='all' <- this did not help 
suppressPackageStartupMessages(require(beanplot)) 
for (i in length(unique(Data[['Days']]))){ 
    # plot.new() ## this did not help either 
    beanplot(Readings~FactorLevels, 
     data=subset(x=Data, subset=(Data[['Days']]==i)), 
     main=paste("Day",i,sep=" "), 
     cex.axis=0.7) 
} 
@ 
+0

이 [R의 FAQ 7.22]이다 (http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f) – MrFlick

+1

사이드 코멘트 :'for (i in length (...))'는 항상 한 번만 실행됩니다. 'for (i in': length (...))'또는'for (i in seq_along (...))'을 추천한다. – r2evans

+0

감사합니다. 이제 작동합니다. – user3658874

답변

0

beanplot은 래티스 그래픽 라이브러리에서 작동합니다. 따라서 비 대화식으로 실행될 때 자동으로 플롯을 생성하지 않습니다. 플롯을 생성하기 위해 호출에 의해 반환 된 객체에 명시 적으로 print()을 호출해야합니다. 시도

<<beanplots,fig.keep='all'>>= 
#fig.keep='all' <- this did not help 
suppressPackageStartupMessages(require(beanplot)) 
for (i in unique(Data[['Days']])){ 
    # plot.new() ## this did not help either 
    print(beanplot(Readings~FactorLevels, 
     data=subset(x=Data, subset=(Data[['Days']]==i)), 
     main=paste("Day",i,sep=" "), 
     cex.axis=0.7)) 
} 
@ 
+0

Sweave 및 일반적으로 수정하십시오. Sweave 대신 knitr을 사용하면 인쇄가 필요하지 않습니다. –

+0

print()를 사용해 보았지만 작동하지 않았습니다. – user3658874

+0

원래 질문에 대한 @ r2evans 코멘트를 참조하십시오. 그의 제안으로 내 코드를 업데이트했습니다. 구조 반복도 잘못되었습니다. 너는'길이()'를 필요로하지 않았다. – MrFlick