Automatically reloading shiny app when add changes - r

I would like to have an option (when working locally) which allows me to see changes in my shiny app automatically after I put some changes in server.R or ui.R file. It is really annoying to manually rerun runApp function every time I add a new thing.
The optimal solution which I really like is xaringan::inifinite_moon_reader function which is extremely helpful.
Is there any solution which do this stuff?
You can find analogical solution here. On the right, the code was modified and saved, on the left, the content of page was updated.

Executing
options(shiny.autoreload = TRUE)
should do the trick.

Related

Create a SaveTo-Dialog in flexdashboard with shiny

I'm quite lost... I'd like to add a save-button to my shiny/flexdashboard-app. First I tried to use 'shiny files' but it seems that this doesn't work with rmarkdown somehow.
Is there another possibility to create a decent "save-to"-Dialog (like a dialog opens up, one can choose the path and set a filename, hits OK and the file gets saved (the saving-part is no problem))?
Any help is highly appreciated.
Best Regards
Daniel
A combination of downloadButton() (or downloadLink()) and downloadHandler() should also work in flexdashboard. You can find the documentation here.

R/Shiny: View full stack/execution log

I'm debugging a Shiny web app, and would like to see the entire control flow/execution path over the course of rendering and updating the generated website.
Is there a way to capture/print/dump-to-file every line of code that is executed in the process of rendering/updating a Shiny app? It would also be good (maybe better?) to see every line of R code parsed by the running R interpreter instance; I'm not concerned about length of this output, and would prefer to get things as verbosely as possible.
I have looked into the stack tracing Shiny functions but these seem to be intended for error catching/handling/reporting. The app is not generating errors/warnings, just setting some variables to NULL at some point when they shouldn't be, so I'm not sure if this is the right approach. These stack tracing functions also seem to be more localized, designed to operate within a given reactive variable/function/render rather than following the control/execution flow across differing reactives/rendering functions in an app.
This app is a large, company-internal app so I cannot give a MRE/MWE.
I finally found the profvis package that does more-or-less exactly what I want by taking a snapshot of the execution stack at a fixed time interval (default 10ms). I'm still working on using this tool to debug, but I believe this will get me there and would also be useful to others debugging Shiny apps that need more than browser() and/or reactlog.
Specifically, I have been doing:
#install.packages("profvis")
library(profvis)
exec_log <- profvis(runApp("myShinyApp"))
...interact with the myShinyApp web page enough to trigger the bug, then interrupt execution...
print(exec_log)

R Shiny Server - set a loading animation on application startup

I've used shinyapps.io in the past and it provides a loading animation (spinner) while the application starts up. This is useful because I load 200MB of .RData-files into the memory (once on startup, not for every server()). This takes up to 40 seconds (in future, I will transition towards storing the data in a database, but for now this is what I got).
For other applications, I've used the docker image rocker/shiny and wanted to fully transition to a Docker-based approach and put all my shiny applications on one server and move away from shinyapps.io. However, the one issue I have with this application is that it does not display a loading animation while it starts so the user is left with a grey screen for a good 30-40 seconds while the data is loaded in the background.
As for the code, I load all data and then I source ui.R and server.R before running shiny::shinyApp(ui = ui, server = server).
Does any of you know a way to specify a loading animation on startup of the application (I haven't found anything in the server configuration itself but I could have overlooked something)? Or have you found a nice workaround to achieve the desired result?
So what I ended up doing was to follow this workaround suggested here: http://www.mazsoft.com/blog/post/2018/01/01/show-progress-bar-when-pre-loading-data-in-shiny-app
The idea is that we initialize all data variables with NULL. Then there is a readData() function outside of server and ui where we load all the data into the global variables and at the beginning of the server function block we check if one of our data variables is.null() which would lead us to call the readData() function.
It is an okay solution for my problem as it's a nice workaround, yet I wasn't able to figure out how to actually display a loading animation on startup, just while loading the data. I hope this helps people with a similar same problem.

Shiny progress bar during loading RData, Package?

I am not sure if I can show any reproducible example here, however let me narrate the issue I am facing with my Shiny app.
I have a Shiny app, which is basically data driven. All my required data is saved in an RData file which is placed in WWW folder. When user put my Shiny app's address (which is hosted on Amazon AWS) i.e. when my Shiny app starts, that RData file is loaded onto R, and then subsequent calculation starts.
The issue is that, my RData file is of quite huge size ~50MB. So R takes quite long time to load that onto memory. From User's perspective, he/she is not sure what is happening behind the screen, that makes some of them leave my App.
So I was thinking if I can put some progress bar to show User something is happening, as that Progress bar would be displayed only during the time when R is loading my RData file. I am aware of various Progress bar schemes available for Shiny, however as far as I know they are to display progress only during calculation (e.g. simulation) not during loading something.
Any idea if it is possible to put some Progress bar during loading RData, package etc?
Thanks for any pointer.
maybe a bit late but I share what I used, should it be useful for someone else.
Take a look at the shinycssloaders package (https://github.com/andrewsali/shinycssloaders).
By adding a simple function withSpinner and set a few parameters, you'll be able to set loader animations to Shiny apps. Furthermore you can select different spinners by looking at this link https://projects.lukehaas.me/css-loaders/.
I used it when I made this app: https://abenedetti.shinyapps.io/bioNPS/
Look at the Species Choropleth map section.
Edit:
Maybe this article and this app could help. Did you had a look at them?

What Happens on Shiny runApp()?

I have a shiny app with a login page. Once the user has logged in, it directs them to the rest of the app.
As I have been developing my shiny app, the time it takes to render the initial login page has been increasing (it is now around 30 seconds).
I have put breakpoints all over my code (including the first lines of ui.R, server.R, and other files which are sourced).
The login screen is similar to that of this great post from Huidong Tian.
What is shiny doing for 30 seconds between me doing runApp(), and
hitting the first breakpoint on the first line of my code?
The console simply prints:
Listening on http://127.0.0.1:xxxx, and then waits.
I hope the question is generic enough such that code isn't needed - and I'm not sure what code could help answer the question. Let me know if further info is needed. Thanks.
Answer to the original question: (this is as I have observed, please comment / edit if incorrect)
When I do runApp(), RStudio compiles the all the code within the application, and no breakpoints are triggered.
Once the entire code is compiled (ie reactive expressions stored in the memory, packages loaded), breakpoints are triggered on lines of code as they are hit.
Why my code was slow before first breakpoint
Reactive expression wasn't properly used on the big database call, and I have now sourced much of my code to other files which has improved the speed greatly.
I have also discovered the fantastic function reactivePoll() which has helped.

Resources