2016-09-26 4 views
0

일부 예측 그래프를 만들 때 반짝이는 앱을 사용하고 있습니다. 그러나, 그 응용 프로그램은 일부 그래프를 보여줍니다 문제가 있습니다. 현재 응용 프로그램의 서버 부분에 다음 코드를 사용하고 있습니다.반짝이는 앱, 일부 그래프 만 표시

server <- function(input, output) { 

output$graph <- renderPlot({ 
     row.number <- which(grepl(input$n1, Data$Kontotal)) 
     name <- Data [row.number, -(1:3)] 
     name <- t(name) 
     name <- ts(name, frequency=12, start=c(2007,1)) 
     n.row <- nrow(name) 

     en<-max(time(name)) 
     ds<-as.data.frame(window(name,end=en)) 
     names(ds)<-'obs' 
     ds$date<-as.Date(time(window(name,end=en)))  


     p1a <- ggplot(data=ds,aes(x=date,y=obs)) 
     p1a <- p1a+geom_line(col='red') 
     p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0)) 
     p1a <- p1a+scale_y_continuous(name='mio.kr') 
     p1a <- p1a + theme_bw() + 
      theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black")) }) 


output$graph2 <- renderPlot({ 

    if (input$n3 == "HW") { 
      row.number <- which(grepl(input$n1, Data$Kontotal)) 
      name <- Data [row.number, -(1:3)] 
      name <- t(name) 
      name <- ts(name, frequency=12, start=c(2007,1)) 
      n.row <- nrow(name) 


      fit <- auto.arima (name) 
      fcast <- forecast(fit, input$n2) 



      ### Plotting 

      data.pred <- forc.ggplot (name, fcast) 




      p1a <- ggplot(data=data.pred,aes(x=date,y=obs)) 
      p1a <- p1a+geom_line(col='red') 
      p1a <- p1a+geom_line(aes(y=fitted),col='blue') 
      p1a <- p1a+geom_line(aes(y=forecast))+geom_ribbon(aes(ymin=lo95,ymax=hi95),alpha=.25) 
      p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0)) 
      p1a <- p1a+scale_y_continuous(name='mio.kr') 
      p1a <- p1a + theme_bw() + 
       theme(panel.border = element_blank(), 
         panel.grid.major = element_blank(), 
         panel.grid.minor = element_blank(), 
         axis.line = element_line(colour = "black")) 
      p1a 


     } 

    if (input$n3 == "arima") { 
     row.number <- which(grepl(input$n1, Data$Kontotal)) 
     name <- Data [row.number, -(1:3)] 
     name <- t(name) 
     name <- ts(name, frequency=12, start=c(2007,1)) 
     n.row <- nrow(name) 


     fit <- auto.arima (name) 
     fcast <- forecast(fit, input$n2) 



     ### Plotting 

     data.pred <- forc.ggplot (name, fcast) 




     p1a <- ggplot(data=data.pred,aes(x=date,y=obs)) 
     p1a <- p1a+geom_line(col='red') 
     p1a <- p1a+geom_line(aes(y=fitted),col='blue') 
     p1a <- p1a+geom_line(aes(y=forecast))+geom_ribbon(aes(ymin=lo95,ymax=hi95),alpha=.25) 
     p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0)) 
     p1a <- p1a+scale_y_continuous(name='mio.kr') 
     p1a <- p1a + theme_bw() + 
      theme(panel.border = element_blank(), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black")) 
     p1a 


    } 


}) 

}

문제 만 ARIMA 그래프가 도시되어있다. 참고 그러나 여기에 게시 된 코드에서 코드의 HW 부분에서 모델을 변경 했으므로 ARIMA 부분 (모델 포함)과 동일하므로 문제가 발생했는지 확인해야합니다. ets 함수 (HW 모델을 추정하는 데 사용).

단순히 HW의 경우 그래프가 있어야하는 빈 공간을 남기고 ARIMA 모델의 오른쪽 그래프를 그립니다.

아무도 비슷한 시도 했습니까?

+2

'ui.r'을 게시하십시오. –

답변

0

renderPlot() 덩어리의 끝에 if 블록의 끝에 p1a을 넣으십시오. renderPlot 청크의 마지막 표현을 그려 봅니다. input$n3 =="HW"의 경우 플로팅 객체 p1a을 생성하지만 FALSE 인 다음 if 조건을 계속 평가하므로 아무 것도 plotOutput()으로 전달되지 않습니다.

대체 솔루션은 if 대신 switch()을 사용합니다. switch()은 일치하는 요소의 표현식 만 평가합니다.

관련 문제