I have a shiny application that queries data from SQL into data frames, and then those data frames are referenced from my shinyServer() block. I've been running it only in RStudio thus far, and so whenever I needed new data I'd just restart the application and before the server loads it would grab all new data.
I'd like to transition the app to shiny server, but I'm not sure how I can induce it to get new data periodically. For the sake of the interface I'd like it to be automatic rather than have a user click a button to initiate the loading. Is there an idiomatic solution for this?
EDIT:
I think I found a solution that works for me.
shinyServer(function(input,output,session){ sourceData <- reactive({ invalidateLater(1000000,session) functionThatGetsData() }) })
There are many reasons why a shiny app runs slower than expected. The most common reason is the Shiny app code has not been optimized. You can use the profvis package to help you understand how R spends its time. You also might want to make sure your server is large enough to host your apps.
You can put the load call inside of the shinyServer function in another reactive so that you can reference the dataset dynamically, and each session can have different data loaded simultaneously.
The smartest would probable be to use reactivePoll
if you can make a fast query to detect if there is new data. This worked very well for me just today actually.
reactivePoll shiny
Reactive polling
Description
Used to create a reactive data source, which works by periodically polling a non-reactive data ource.
Usage
reactivePoll(intervalMillis, session, checkFunc, valueFunc)
Arguments
intervalMillis
Approximate number of milliseconds to wait between calls to
checkFunc
. his an be either a numeric value, or a function that returns a numeric value.session
The user session to associate this file reader with, or
NULL
if none. If non-null, he reader will automatically stop when the session ends.checkFunc
A relatively cheap function whose values over time will be tested for equality; nequality indicates that the underlying value has changed and needs to be invalidated and re-ead usingvalueFunc
. See Details.valueFunc
A function that calculates the underlying value. See Details.
You're looking for invalidateLater
. Put this, with the appropriate interval, in the reactive expression that retrieves data from the the database.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With