这是我的第一个有光泽的应用程序。 我已经创建了一个反应式表达式,该表达式导入数据即data1(),然后跟随一个观察表达式以确定所选的两列。 另一个反应式表达式使data2()表示在上述观察事件中形成的数据。 我想将在data2()函数中创建的数据用于进一步的计算,但是我无法使用它。
我想将data2()的数据用作我的watchEvent函数中的数据框。但我无法使用它,因此也无法应用原木屑。 我需要有关如何将data2()用作进一步执行代码的数据框的帮助。 附加服务器和ui代码。
原始数据看起来像-
Date Month Total_visit Media_Spend
1/1/2017 1 123000 2000000
1/2/2017 2 234700 2500000
以此类推.......
服务器部分
library(shiny)
library(dplyr)
library(prophet)
library(ggplot2)
library(forecast)
library(shinydashboard)
library(DT)
library(rstan)
shinyServer(function(input,output, session){
data1 <- reactive({
inFile <- input$file1
if (is.null(inFile))
return(NULL)
read.csv(inFile$datapath)
})
observe({
updateSelectInput(session, inputId = "Dep_Var" , choices = colnames(data1()))
updateSelectInput(session, inputId = "Ind_Var" , choices = colnames(data1()))
})
data2<- reactive({ input1<-data1()
Dep_Var<-input$Dep_Var #Total Visits
Ind_Var<-input$Ind_Var #Media Spend
data_p<- input1%>% select(Date,Dep_Var,Ind_Var)
return(data_p)})
# output$contents <- renderDataTable(data2()) -------was just checking the output
}
observeEvent(input$Submit, {Forecastdata <- reactive({
data_2p <- data2()
data_2p$y <- log10(as.numeric(data_2p$Dep_Var))
data_2p$IndVarLog <- log10((data_2p$Ind_Var))
data_2p$ds <- as.Date(data_2p$Date, format = "%m/%d/%Y")
m <- prophet(seasonality.mode = 'multiplicative')
m <- add_regressor(m, "IndVarLog")
m <- fit.prophet(m, data_2p)
forecast_val <- predict(m, data_2p)
return(data_2p)
}
)
output$contents <- renderDataTable(Forecastdata())
}
)
}
)
------------------- ui part
dashboardPage(
dashboardHeader(title = "Forecasting Simulator"),
dashboardSidebar(
sidebarMenu(
menuItem(fileInput(inputId = "file1", label = "Choose a File",
multiple = FALSE,
accept =c('text/csv',
'text/comma-separated-values,text/plain',
'.csv'))),
checkboxInput("header", "Header", TRUE),
selectInput("Dep_Var" ,"Select KPI", choices=c()),
selectInput("Ind_Var","Select Independent Variable", choices = c())
),
actionButton("Submit", "Forecast")
),
dashboardBody(
fluidRow(
box( width = 8, title = "Final Data",
DT::dataTableOutput("contents"))
)))
预期的结果是将data2()用作数据帧。 但是我无法使用它,而我的renderDataTable没有显示任何输出,因为我无法使用在data2()中创建的数据