блестящее приложение медленное после добавления реактивного набора данных - PullRequest
0 голосов
/ 14 сентября 2018

Я создаю приложение, которое формирует два фрейма данных путем подстановки предоставленного фрейма данных. Эти два кадра данных и несколько входов затем используются для вычисления нескольких значений, которые образуют окончательный кадр данных. Фрейм данных сведен в таблицу и нанесен на график.

Я только что добавил реактивные функции, которые формируют два кадра данных, используемых в вычислениях. Это действительно замедлило мое приложение. Когда я предоставил приложению готовые к использованию кадры данных, расчет и построение происходили мгновенно. При выполнении процедуры поднабора достижение тех же конечных результатов занимает около 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...