闪亮和局部变量

时间:2019-05-26 12:11:59

标签: r shiny local-variables

以下Shiny服务器端代码可以正常运行

  tsm <- reactive({
      if (input$forecast == "fit_BC") {
          fit_d <- ar(BoxCox(dtr, lambda=BoxCox.lambda(dtr)))
          forecast(fit_d, h=12, lambda=BoxCox.lambda(dtr))
      } else if (input$forecast == "fit_net") {
          lambda <- BoxCox.lambda(dtr)
          fit_d <- nnetar(dtr, lambda = lambda)
          forecast(fit_d, h = 12, PI = TRUE)
      }
  })

但是,当我使用局部变量LAMBDA(在第一个“ if”块中)时,它不再存在:

  tsm <- reactive({
      if (input$forecast == "fit_BC") {
          lambda <- BoxCox.lambda(dtr)
          fit_d <- ar(BoxCox(dtr, lambda=lambda))
          forecast(fit_d, h=12, lambda=lambda)
      } else if (input$forecast == "fit_net") {
          lambda <- BoxCox.lambda(dtr)
          fit_d <- nnetar(dtr, lambda = lambda)
          forecast(fit_d, h = 12, PI = TRUE)
      }
  })

请注意,第二个“ if”块中的第二个LAMBDA不会使R烦恼。很显然,问题与“局部变量” LAMBDA有关。但我不明白为什么?

...我在下面提供了完整的代码;还可以在

共享数据

sap.m.List

global.R

library(shiny)
library(shinydashboard)

library(ggplot2)
library(forecast)
library(plotly)
library(ggfortify)
library(tseries)

data_master <- read.csv("data.csv")
d <- ts(data_master$demand, start = c(1995, 1), frequency = 12)
dtr <- ts(data_master$demand, start=c(1995, 1), end=c(2014, 12), freq=12)

ui.R

shinyUI(dashboardPage(
  dashboardHeader(title = "",
                  titleWidth = 450),
  dashboardSidebar(disable = TRUE),
  dashboardBody(
    fluidRow(
      column(width = 8,
             box(plotlyOutput("forecast_plots"),
                 width = NULL)
    )))))

server.R

shinyServer(function(input, output, session) {

  tsm <- reactive({

        # No "error" here
        # fit_d <- ar(BoxCox(dtr, lambda=BoxCox.lambda(dtr)))
        # forecast(fit_d, h=12, lambda=BoxCox.lambda(dtr))


        # but this is generating error
        lambda <- BoxCox.lambda(dtr)
        fit_d <- ar(BoxCox(dtr, lambda=lambda))
        forecast(fit_d, h=12, lambda=lambda)
  })

  output$forecast_plots <- renderPlotly({
    df <- data.frame(time=c(1995,2015,1/12), x=c(tsm()$x, tsm()$mean))
    ggplot(df, aes(time, x))+geom_line(colour = "black") 

  })
    })

0 个答案:

没有答案