在/R中使用下拉菜单筛选的数据集上执行代码
我正在尝试创建一个闪亮的应用程序来完成以下任务- 从下拉菜单中选择一个ID,例如:106841 过滤约150K观测值的原始数据集,并使用主键获得约600个值的较小数据集 在此数据集上执行其他操作并运行回归 呈现回归曲线图和文本摘要 允许根据用户输入将同一进程应用于不同的ID 示例代码结构,让您了解我是如何满足这些要求的-在/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
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分开,但是当您将不同的步骤分开时,它会使代码更具可读性。如果你想在其他地方重复使用结果,这样做也更容易
希望这有帮助 代码是否在控制台中生成绘图而不闪烁?是的,确实如此。我想我在实现被动变量和传递数据帧的过程中出错了。