2016-09-26 174 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

p1a放在块之外的renderPlot()块的末尾。 renderPlot试图绘制块的最后表达式。在input$n3 =="HW"的情况下,您生成您的绘图对象p1a,但随后继续评估下一个if条件,即FALSE,因此没有任何内容传递给plotOutput()

另一种解决方案是使用switch()而不是ifswitch()只计算匹配元素的表达式。

相关问题