/dashR

Dash for R - An R interface to the Dash ecosystem for creating analytic web applications

Primary LanguageRMIT LicenseMIT

CircleCI GitHub GitHub commit activity

Dash for R

Create beautiful, analytic web applications in R.

Documentation | Gallery

Installation

https://dashr.plotly.com/installation

dash isn't yet available on CRAN, but you may install the development versions of the package as well as Dash components from GitHub.

🛑 Make sure you're on at least version 3.0.2 of R. You can see what version of R you have by entering version in the R CLI. CRAN is the easiest place to download the latest R version.

First, install dash dependencies from CRAN:

install.packages(c("fiery", "routr", "reqres", "htmltools", "base64enc", "plotly", "mime", "crayon", "devtools"))

Installing the package and component libraries directly from GitHub using the devtools package is easy:

library(devtools)
# installs dashHtmlComponents, dashCoreComponents, and dashTable
# and will update the component libraries when a new package is released
install_github("plotly/dashR", upgrade = TRUE)

Now, load the packages in R:

library(dash)
library(dashHtmlComponents)
library(dashCoreComponents)
library(dashTable)

That's it!

Getting Started

https://dashr.plotly.com/getting-started

The R package dash makes it easy to create reactive web applications powered by R. It provides an R6 class, named Dash, which may be initialized via the new() method.

library(dash)
library(dashHtmlComponents)
library(dashCoreComponents)

app <- Dash$new()

Similar to Dash for Python, every Dash for R application needs a layout (i.e., user interface) and a collection of callback functions which define the updating logic to perform when input value(s) change. Take, for instance, this basic example of formatting a string:

app$layout(
  htmlDiv(
    list(
      dccInput(id = "inputID", value = "initial value", type = "text"),
      htmlDiv(id = "outputID")
    )
  )
)

app$callback(output = list(id="outputID", property="children"), 
             params = list(input(id="inputID", property="value"),
                      state(id="inputID", property="type")), 
  function(x, y) {
    sprintf("You've entered: '%s' into a '%s' input control", x, y)
  }
)

app$run_server(showcase = TRUE)

Here the showcase = TRUE argument opens a browser window and automatically loads the Dash app for you.

Hello world example using dccGraph

app <- Dash$new()

app$layout(
  htmlDiv(
    list(
      dccInput(id = "graphTitle", 
               value = "Let's Dance!", 
               type = "text"),
      htmlDiv(id = "outputID"),
      dccGraph(id = "giraffe",
               figure = list(
                 data = list(x = c(1,2,3), y = c(3,2,8), type = 'bar'),
                 layout = list(title = "Let's Dance!")
               )
      )
    )
  )
)

app$callback(output = list(id = "giraffe", property = "figure"), 
             params = list(input("graphTitle", "value")),     
             function(newTitle) {
                 
                 rand1 <- sample(1:10, 1)
                 
                 rand2 <- sample(1:10, 1)
                 rand3 <- sample(1:10, 1)
                 rand4 <- sample(1:10, 1)
                 
                 x <- c(1,2,3)
                 y <- c(3,6,rand1)
                 y2 <- c(rand2,rand3,rand4)
                 
                 df = data.frame(x, y, y2)
                 
                 list(
                   data = 
                     list(            
                       list(
                         x = df$x, 
                         y = df$y, 
                         type = 'bar'
                       ),
                       list(
                         x = df$x, 
                         y = df$y2, 
                         type = 'scatter',
                         mode = 'lines+markers',
                         line = list(width = 4)
                       )                
                     ),
                   layout = list(title = newTitle)
                 )
               }
)

app$callback(output = list(id = "outputID", property = "children"), 
             params = list(input("graphTitle", "value"),
                           state("graphTitle", "type")), 
             function(x, y) {
                 sprintf("You've entered: '%s' into a '%s' input control", x, y)
             }
)

app$run_server(showcase = TRUE)

Screenshot of "Hello World" app

hello_dcc