Я создаю приложение, которое формирует два фрейма данных путем подстановки предоставленного фрейма данных. Эти два кадра данных и несколько входов затем используются для вычисления нескольких значений, которые образуют окончательный кадр данных. Фрейм данных сведен в таблицу и нанесен на график.
Я только что добавил реактивные функции, которые формируют два кадра данных, используемых в вычислениях. Это действительно замедлило мое приложение. Когда я предоставил приложению готовые к использованию кадры данных, расчет и построение происходили мгновенно. При выполнении процедуры поднабора достижение тех же конечных результатов занимает около 2 минут. Что я могу сделать, чтобы ускорить это? Спасибо!
server<-function(input, output) {
pic1<-reactive({
pic1<-data
pic1<-pic1[pic1$Company==input$company,]
})
output$groups <- renderUI({
checkboxGroupInput("groups","groups:",unique(as.character(pic1()$Group)))
})
pic2<-reactive({
pic2<-pic1()
pic2<-pic2[pic2$Group %in% input$groups,]
})
output$names<-renderUI({
checkboxGroupInput("names","names:",unique(as.character(pic2()$Name)),selected = unique(as.character(pic2()$Name)))
})
pic3<-reactive({
pic3<-pic2()
pic3<-pic3[pic3$Name %in% input$names,]
pic3<-distinct(pic3,Name, .keep_all = TRUE)
})
pic4<-reactive({
pic4<-data
pic4<-pic4[pic4$Company==input$company2,]
pic4<-pic4[pic4$Name %in% input$names,]
pic4<-distinct(pic4,Name, .keep_all = TRUE)
})
pic5<-reactive({
pic5<-pic3()
})
output$confirmed<-renderTable(pic5()['Name'])
observeEvent(input$button,{
ind1$df=pic5()
ind2$df=pic4()
})
ind1<-reactiveValues(
df=NULL
)
ind2<-reactiveValues(
df=NULL
)
guh<-eventReactive(input$button,{
l1r=input$l1r
#several other inputs are collected this way here
results=NULL
for (n in 1:(nrow(ind1$df))) {
i1a<-ind1$df[n,"A"]
i1b<-ind1$df[n,"B"]
i1c<-ind1$df[n,"C"]
i2a<-ind2$df[n,"A"]
i2b<-ind2$df[n,"B"]
i2c<-ind2$df[n,"C"]
#calculates values xa and xb with a long equation
results=rbind(results,data.frame(xa,xb))}
rownames(results)<-ind1$df$Name
results
})
output$table<-renderTable(guh())
output$plot<-renderPlot(plot(guh()))
}
shinyApp(ui=ui,server=server)