2012-07-11 3 views
6

함수 내에서 생성 된 플롯을 인쇄하려고했던 R Studio에서 R-Markdown 기능을 사용하려고합니다. 이것은 내가하려는 일의 기본 실행 예입니다.RStudio에서 R Markdown을 사용하여 함수에서 생성 된 플롯 인쇄

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 

    plot(data[,1],data[,2]) 
    plot(data[,1],data[,3]) 
} 

for (i in 1:10){ 
t1 <- rbind(i,ex(dat)) 
} 
t1 
``` 

이 코드를 테스트들은 ".Rmd"파일로 저장해야합니다 다음 RStudio 도구 모음에서 knithtml()를 실행하십시오. 위의 코드는 내가 원한 html 출력물로 절대적으로 잘 작동한다. 그러나 기본 플롯 기능을 ggplot 기반 코드로 대체하면 knithtml()을 얻을 수 없기 때문에 전에 얻은 10 개의 플롯의 ggplot 출력을 생성 할 수 있습니다. 위의 기본 플롯 코드가 이제 다음 코드로 바뀝니다.

p1 <- ggplot(data=data, aes(x=data[,1],y=data[,2])) 
    p1 <- p1+geom_point() 
    p1 

나는 여기 아주 간단한 것을 놓치고 있습니다.

VJ

코드에서 두 가지 문제가 있습니다
+0

당신은 측면 플롯을 만들어 그 니트 경우는 어떻게? –

+1

Nope! 함수 내부에있는 한 인쇄되지 않습니다. 또한 qplot()이 원하는 출력을 생성하는 반면 gplot은 원하는 출력을 생성하는지 테스트했습니다. 함수 안에 생성 된 ggplot 객체를 ggsave()를 사용하여 이외의 외부에서 인쇄 할 수 없습니까? 예 : PDF로 저장 –

+1

'for' 문이나 함수 안에'print' ggplot2 객체가 명시 적으로 필요하므로'print (p1)'을 사용해보십시오. – kohske

답변

5

: 그것은 데이터 환경 내에서 작동 bacause

  1. ggplot는, 데이터 x와 y 데이터를 인식하지 못하는 경우가. 열 이름을 직접 제공해야합니다.
  2. yur 루프의 코드가 의미가 없습니다. 플롯을 인덱스와 혼합 할 수는 없습니다 ... (기본 플롯과 함께 작동하는 이유는 부작용입니다) 간단한 플롯 명령으로 대체했습니다.

다음은 작동합니다

**Test printing plots generated in a function** 
================================================ 

``` {r fig.width=8, fig.height=4, warning=FALSE, eval=TRUE, message=FALSE, tidy=TRUE, dev='png', echo=FALSE, fig.show='hold', fig.align='center'} 
dat <- data.frame(x=c(1:10),y=c(11:20),z=c(21:30),name=rep(c("a","b"),each=5)) 
library(ggplot2) 

ex <- function(data){ 
    p1 <- ggplot(data=data, aes(x=x,y=y)) 
    p1 <- p1+geom_point() 
    return(p1) 
} 

for (i in 1:2){ 
plot(ex(dat)) 
} 

``` 
+0

수정 해 주셔서 감사합니다. 플로팅 함수에 대한 인덱스가있는 유일한 이유는 플롯 생성과 함께 함수 (요약 테이블과 같은)에서 다른 객체를 반환하는 것입니다. 나는 이것을하는 더 좋은 방법이 있다고 확신하지만 이것은 나를 위해 일하는 것처럼 보였다. 또한 for 루프에서 plot() 명령을 사용할 때 R이 변수 (x, y)를 필요로하지 않는다고 불평하지 않는 이유가 궁금합니다. 나는 인쇄물로 해봤 다. 어쨌든 고마워. –