Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R + Shiny which hammer? straight Shiny, flexdashboard or shinydashboard?

At the risk of getting hit with a mods "too broad a question" hammer, I want to ask given the plethora of interactive R Shiny tools and packages emerging, when do you use which one?

  1. Shiny - to me only downside your project needs to run from shiny server but seems the best choice.

  2. shinydashboard - Shiny but has nice Value boxes for callouts.

  3. flexdashboard - write it up in Rmd. What does that gain you that straight Shiny does not? Perhaps, useful to email to a client provided you are happy to pass over data? I have been playing around with flexdashboard but its inability to work with datatable (library(DT)) makes me feel like it needs a few more iterations.

Looking at other answers, I am not alone in asking this question.

The creators are providing lots of galleries out there to showcase their packages/approach, but how do you know which path to go on?

What are the clear advantages of using one over the other?

like image 625
micstr Avatar asked Jun 23 '16 12:06

micstr


People also ask

What is the difference between Flexdashboard and shiny?

flexdashboard is just enhanced RMarkdown, using simple convention for UI arrangement, htmlwidgets etc. You can use Shiny in it but it's limited. To use Shiny you will need to write more code for UI and behavior, learn more things related to html, css, especially reactive which need some time to grasp.

What is Shinydashboard?

shinydashboard: Create Dashboards with 'Shiny' Create dashboards with 'Shiny'. This package provides a theme on top of 'Shiny', making it easy to create attractive dashboards.


2 Answers

There's one nuance that needs to be made. Interactivity does not necessarily require a server behind it running code. Interactivity can be provided using embedded JavaScript, which would execute at the client-side (like plotly, highcharts, leaflet etc). So if we don't use the word "interactivity", but describe the interactivity explicitly, then your options become:

  • Shiny: Needs a server behind it to execute R code on user input. Can implement any layout. Can run interactive code either by processing serverside (in R) or clientside (in embedded JavaScript).
  • shinydashboard:Needs a server behind it to execute R code on user input. Can implement a dashboard layout. Contains some specific widgets designed to work in a dashboard layout. Can run interactive code either by processing serverside (in R) or clientside (in embedded JavaScript).
  • flexdashboard: Just a document that looks like a dashboard. Also contains some specific widgets designed to work in a dashboard layout. Can only run interactive code clientside (in embedded JavaScript).

So basically, if whatever interactivity is required can be offered by an existing package (that uses htmlwidgets), then you can just use flexdashboard and you don't need to deploy it to any Shiny server. Otherwise, you do need to deploy to a Shiny server and you should use either Shiny, or shinydashboard.

like image 164
Amit Kohli Avatar answered Sep 19 '22 06:09

Amit Kohli


I like to put shiny modules inside a flexdashboard. As long as you put runtime: shiny in your YAML header section, using shiny modules should be relatively straightforward. By relative, I mean, take a day and read over all the examples from RStudio, then try to do the same with your code. Once you're over the learning curve, modules in flexdashboards make future development much more streamlined, mentally easy, and in my experience, afford me the opportunity to really focus on the underlying data-based questions I've been asked to address. I think flexdashboards + shiny modules is the best of both worlds: flexdash to break up some of the layout items, easily add or remove a section of code, isolate various aspects of your application code in a more visually distinct layout (the shading of 'chunks' in an RMD file, etc.), while still allowing you to get into more complex, quintessentially shiny things like setting up observers, proxies, or custom layouts.

like image 21
nate Avatar answered Sep 22 '22 06:09

nate