在/R中使用下拉菜单筛选的数据集上执行代码

在/R中使用下拉菜单筛选的数据集上执行代码,r,rstudio,shiny,R,Rstudio,Shiny,我正在尝试创建一个闪亮的应用程序来完成以下任务- 从下拉菜单中选择一个ID,例如:106841 过滤约150K观测值的原始数据集,并使用主键获得约600个值的较小数据集 在此数据集上执行其他操作并运行回归 呈现回归曲线图和文本摘要 允许根据用户输入将同一进程应用于不同的ID 示例代码结构,让您了解我是如何满足这些要求的- Server.R: #Excerpt of server code branch_data <- openxlsx::read.xlsx("Branch_Final.xl

我正在尝试创建一个闪亮的应用程序来完成以下任务-

从下拉菜单中选择一个ID,例如:106841 过滤约150K观测值的原始数据集,并使用主键获得约600个值的较小数据集 在此数据集上执行其他操作并运行回归 呈现回归曲线图和文本摘要 允许根据用户输入将同一进程应用于不同的ID 示例代码结构,让您了解我是如何满足这些要求的-

Server.R:
#Excerpt of server code
branch_data <- openxlsx::read.xlsx("Branch_Final.xlsx")
<Other data input and cleaning code>
branch_data_final <- data.table(branch_data)

shinyServer(function(input, output) {

#Filtering data set using ID (input$select_ID is the variable)
data_branch_analysis<-(data_branch_analysis[ID==input$select_ID])[order(DATE)]

#Data manipulation for regression
data_branch_analysis[,NDATE:=as.Date(DATE,"%Y.%m.%d")]
data_branch_analysis[,L_AVG_AGE:=shift(AVG_AGE,1)]
data_branch_analysis[,L_AVG_WAGE:=as.numeric(shift(AVG_WAGE,1))]
<Other lines of code for manipulation>

#Regression
 fit1<-lm(data=data_branch_analysis,VISITOR_NUM~0+time+WD+L_W3_7+L_W7_14+L_W14_21+...)
bestm<-step(fit1)
fit2<-auto.arima(data_branch_analysis_train$VISITOR_NUM,max.order=30,xreg=as.matrix(x_reg))
<Other lines of code for regression)

#GGPLOT 

  output$final_forecast_branch <- renderPlot({
    g <-
      ggplot()+geom_line(aes(x=data_branch_analysis$NDATE,y=data_branch_analysis$VISITOR_NUM,col="original"))+
      geom_line(aes(x=data_branch_analysis$NDATE[2:(ntrain+1)],y=fit2$fitted,col="train"))+
     geom_line(aes(x=data_branch_analysis$NDATE[(ntrain+2):nrow(data_branch_analysis)],y=fore2$mean,col="test"))
    g
  })

output$final_forecast_branch_analysis_accuracy <- renderText(expr = accuracy(fore2,x=data_branch_analysis_$VISITOR_NUM[(ntrain+2):nrow(data_branch_analysis)])


}

UI.R
#Excerpt of UI code

navbarMenu("Analyzer Widget",
               tabPanel(
                 "Branch",
                 sidebarLayout(
                   fluid = 'TRUE',
                   sidebarPanel(
                   # p("Please enter the following information - "),
                     selectInput(
                       inputId = "select_ID",
                       'Select Branch ID',
                       selected = "106841",
                       sort(unique(data_branch_analysis$ID))
                     )
                   ),
                   mainPanel(tabsetPanel(
                     tabPanel(
                       'Training Data',
                       plotOutput('final_forecast_branch'),
                       p("Accuracy of Model"),
  textOutput("final_forecast_branch_analysis_accuracy"),
...
目前,我没有看到ggplot或textOutput块的输出。我尝试过反应式和观察式,但显然我无法正确地实施。如果您能想到如何构建代码以使其正常工作,我们将不胜感激


感谢您的输入。

您好,您需要生成一系列反应式表达式,如下面的示例所示

shinyServer(function(input, output) {
  filterDta <- reactive({
    #Filtering data set using ID (input$select_ID is the variable)
    data_branch_analysis<-(data_branch_analysis[ID==input$select_ID])[order(DATE)]

  })
  minpulateDta <- reactive({
    data_branch_analysis <- filterDta()
    #Data manipulation for regression
    data_branch_analysis[,NDATE:=as.Date(DATE,"%Y.%m.%d")]
    data_branch_analysis[,L_AVG_AGE:=shift(AVG_AGE,1)]
    data_branch_analysis[,L_AVG_WAGE:=as.numeric(shift(AVG_WAGE,1))]
    <Other lines of code for manipulation>

  })

  calcRegression <- reactive({
      #Regression
    data_branch_analysis <- minpulateDta()  
      fit1<-lm(data=data_branch_analysis,VISITOR_NUM~0+time+WD+L_W3_7+L_W7_14+L_W14_21+...)
    bestm<-step(fit1)
    fit2<-auto.arima(data_branch_analysis_train$VISITOR_NUM,max.order=30,xreg=as.matrix(x_reg))
    <Other lines of code for regression)

  })

#GGPLOT 

output$final_forecast_branch <- renderPlot({
  data_branch_analysis <- calcRegression()
  g <-
    ggplot()+geom_line(aes(x=data_branch_analysis$NDATE,y=data_branch_analysis$VISITOR_NUM,col="original"))+
    geom_line(aes(x=data_branch_analysis$NDATE[2:(ntrain+1)],y=fit2$fitted,col="train"))+
    geom_line(aes(x=data_branch_analysis$NDATE[(ntrain+2):nrow(data_branch_analysis)],y=fore2$mean,col="test"))
  g
})

output$final_forecast_branch_analysis_accuracy <- renderText(expr = accuracy(fore2,x=data_branch_analysis_$VISITOR_NUM[(ntrain+2):nrow(data_branch_analysis)])


}
在这种情况下,您当然不需要将minpulateDta和calcRegression分开,但是当您将不同的步骤分开时,它会使代码更具可读性。如果你想在其他地方重复使用结果,这样做也更容易


希望这有帮助

代码是否在控制台中生成绘图而不闪烁?是的,确实如此。我想我在实现被动变量和传递数据帧的过程中出错了。