Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R Shiny app progress Indicator for loading data

Shiny is our internal BI tool. For our Shiny apps, we load data before shinyServer running:

load("afterProcessedData.RData")
# or dt = fread("afterProcessedData.csv")

shinyServer(function(input, output, session){ ...

However, some of apps are loading big files and they take up to 30s to load up. Many users, when they open a page, don't know whether the page is broken since it is stuck when it is loading. They may close it or click filters, which may cause an error. In this case, a progress bar will be very helpful. I notice withProgress() may help but it has to be inside reactive() or renderXx().

One way I can do is to have laod() warpped with reactive() inside the shinyServer(function(input, output, session){ but my concern is it will slower the performance. And my users very care about the responsive performance.

Any suggestions for this situation?

Edit: I guess there is not an easy way to do this. I have another thought. Maybe I can show a text on the screen saying 'the data is loading', but I have to make it disappear after the first table gets show up. However, I don't know how to set up the condition. Below is my code showing first table:

dashboardBody(
fluidRow( 
  tabBox(width = 12,
         tabPanel("Summary",
                  dataTableOutput("data1")),

Thank you in advance!

like image 246
Z. Zhang Avatar asked Feb 09 '16 18:02

Z. Zhang


1 Answers

Even though I am still interested in knowing how to add process bar for load(), I have implemented the alternative solution, which is good for now. It has a text saying 'the data is loading...' on the page, and it will disappear after first table shows up.

#server.R   firstData is a reactive function to get the data for 1st table
  output$firstTable = reactive({
return(is.null(firstData()))
})
#ui.R
      conditionalPanel(
    condition = "output.firstTable",
    box(width = 12,
           h1("The data is loading...")
        )
  )
like image 186
Z. Zhang Avatar answered Oct 02 '22 01:10

Z. Zhang