【问题标题】:Avoid multiple function calls in server shiny避免服务器闪亮中的多个函数调用
【发布时间】:2019-04-12 11:21:58
【问题描述】:

我在闪亮应用的服务器功能中有以下代码。

要绘制每种类型的图表,我每次都需要调用 getPlotData() 函数。有什么办法可以避免它使应用程序更快?

功能

 #This gets Sales data for selected client data
  getPlotData <- reactive({

    inpParam <<- input$noc 
    getSalesData(inpParam)
    End_date <<- input$endDate    

    SalesClientData <<- GetSalesClientData()
    WeeklySales <<- GetWeeklyData()
    FortNightData <<- GetFortNightlyData()
    EWS <<- GetEWSData()
    MONTHLYSALES <<- GetMonthlyData()
    wtSafetyRatio <<- round(as.numeric(crossprod(MONTHLYSALES$SafetyRatio,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    wtHealthScore <<- round(as.numeric(crossprod(MONTHLYSALES$HealthScore,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    wtPaymentScore <<- round(as.numeric(crossprod(MONTHLYSALES$PaymentScore,MONTHLYSALES$Weights)/sum(MONTHLYSALES$Weights)),2)
    ROLLDATA <<- GetRollingData()
    EARLY_TOPUP <<- GetEarlyTopUp()

  })

  #DPD Plots
  output$DPDPLot<-renderPlotly({

    getPlotData()

    plot_ly(data=SalesClientData, x = ~Date, y = ~DPD, name='DPD', type='scatter', mode = 'lines') %>%
      add_trace(y = ~CHECKNACHDPD, name = 'CHEQUE-NACH Payment', type='bar') %>% 
      add_trace(y = ~CHKNACHBounceDPD, name = 'CHEQUE-NACH Bounce', type='bar') %>% 
      layout(title= "DPD Pattern", legend = list(orientation = "h"))

  })

  #Sales Plot
  output$SalesPlot<-renderPlotly({

    getPlotData()

    SalesDayWise = group_by(SalesClientData,Day)
    SalesDayWise = summarize(SalesDayWise,TotalSales = sum(TotalPayRecvdAdj, na.rm=TRUE))

    plot_ly(data=SalesDayWise, x = ~Day, y = ~TotalSales, name='Total Sales', type='bar') %>%
      layout(title="Daywise Sales", legend = list(orientation = "h"))

  })

【问题讨论】:

  • 我认为您使用的 reactive 表达式错误。请查看教程here

标签: r function shiny


【解决方案1】:

我认为您有错误的印象,即仅仅因为您再次调用该函数,每次调用它都会计算。但实际上它只在响应式表达式中的输入小部件发生变化时计算一次。

您可以通过在函数 GetSalesClientData() 或该反应式表达式中的任何其他函数中添加打印语句来测试这一点。

即使您调用反应式表达式 100 次,它也只会在反应式表达式中包含的输入小部件发生变化时计算并获得新结果。

在这种情况下是input$nocinput$endDate

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2016-10-26
    • 1970-01-01
    • 2016-05-23
    • 2017-07-05
    • 1970-01-01
    • 2021-11-07
    • 2021-03-10
    • 2019-08-12
    相关资源
    最近更新 更多