36
R Shiny Part I R Shiny Part I Statistical Computing & Statistical Computing & Programming Programming Shawn Santo Shawn Santo 06-08-20 06-08-20 1 / 36 1 / 36

R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

R Shiny Part IR Shiny Part I

Statistical Computing &Statistical Computing &ProgrammingProgramming

Shawn SantoShawn Santo

06-08-2006-08-20

1 / 361 / 36

Page 2: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Supplementary materials

Companion videos

Introduction to R ShinyBuilding the UICreating the server function

Additional resources

Shiny documentationShiny Widgets GalleryShiny Cheat Sheet

2 / 36

Page 3: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Shiny is an R package.

Build web-based apps with R inRStudio.

Shiny can incorporate CSS themesand JavaScript actions.

What is Shiny?

3 / 36

Page 4: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

How does Shiny work?

4 / 36

Page 5: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

How does Shiny work?

5 / 36

Page 6: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

How does Shiny work?

6 / 36

Page 7: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Getting started

Open RStudio

Run install.packages("shiny"), if needed

Go to File > New File > Shiny Web App

Enter your application's name

Keep option Single File (app.R) selected

Enter the directory of where the application should be saved

File app.R should open, click Run App to see the result

7 / 36

Page 8: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Function fluidPage() creates adynamic HTML user interface you seewhen you look at an RShiny app.Convention is to save this as an objectnamed ui.

Function server() is user-definedand contains R commands yourcomputer or external server need torun the app.

Function shinyApp() builds theapp based on the user interface andserver pair of code.

Main components of RShiny

# Load package shinylibrary(shiny)# Define UI for applicationui <- fluidPage(

)

# Define server logicserver <- function(input, output)

}

# Build and run the applicationshinyApp(ui = ui, server = server)

8 / 36

Page 9: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Available examples

Enter any of the following in your Console to see the Shiny app in action along with thecode.

runExample("01_hello") # a histogramrunExample("02_text") # tables and data framesrunExample("03_reactivity") # a reactive expressionrunExample("04_mpg") # global variablesrunExample("05_sliders") # slider barsrunExample("06_tabsets") # tabbed panelsrunExample("07_widgets") # help text and submit buttonsrunExample("08_html") # Shiny app built from HTMLrunExample("09_upload") # file upload wizardrunExample("10_download") # file download wizardrunExample("11_timer") # an automated timer

9 / 36

Page 10: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

User interfaceUser interface

10 / 3610 / 36

Page 11: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

User interface: inputsUser interface: inputs

11 / 3611 / 36

Page 12: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Input widgets

12 / 36

Page 13: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

13 / 36

Page 14: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Adding an input widget

Most input widgets are set-up as *Input(inputId, label, ...) or*Button(inputId, label, ...), where * is replaced with the widget's name.

For example, to create a slider widget we can write

sliderInput(inputId = "bins", label = "Number of bins:", min = 1, max = 50, value = 30)

Typically, the first two widget function argument names are not specified since most widgetsfirst take an inputId and label. Argument inputId is where you specify a name forthe widget (this is not seen by the user); argument label is the label that will appear in yourapp (this will be seen by the user).

14 / 36

Page 15: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

What do these widget functionsreturn?

sliderInput(inputId = "bins", label = "Number of bins:", min = 1, max = 50, value = 30)

Some HTML!

<div class="form-group shiny-input-container"> <label class="control-label" for="bins">Number of bins:</label> <input class="js-range-slider" id="bins" data-min="1" data-max="50" dat</div>

15 / 36

Page 16: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

ui <- fluidPage( # add slider sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30))

server <- function(input, output) {

}

shinyApp(ui = ui, server = server)

Assortment of input widgets

16 / 36

Page 17: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Assortment of input widgets

ui <- fluidPage( # add slider sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30), # text box input textInput("title", "Histogram title", value = "Histogram"))

server <- function(input, output) {

}

shinyApp(ui = ui, server = server)

17 / 36

Page 18: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Assortment of input widgets

Continue to add as many additional widgets as you want/need.

ui <- fluidPage( # add slider sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30), # text box input textInput("title", "Histogram title", value = "Histogram"), # combo box selectInput("color", "Histogram fill", choices = c("Red", "White", "Bl selected = "Red"))

server <- function(input, output) {

}

shinyApp(ui = ui, server = server)

18 / 36

Page 19: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

User interface: outputsUser interface: outputs

19 / 3619 / 36

Page 20: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Output functions

Inputs are added with *Input(). Similarly, outputs in Shiny are added with *Output().

Output function Creates

dataTableOutput() data table

htmlOutput() raw HTML

imageOutput() image

plotOutput() plot

tableOutput() table

textOutput() text

uiOutput() raw HTML

verbatimTextOutput() text

20 / 36

Page 21: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Output function details

The first argument for each output function is outputId. This argument is where youspecify a name for the output (this is not seen by the user). This name will serve as referencefor code in function server().

21 / 36

Page 22: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

ui <- fluidPage( # add slider sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30),

plotOutput(outputId = "hist"))

server <- function(input, output) {

}

shinyApp(ui = ui, server = server)

Output function

Our code plotOutput(outputId = "hist") allocates space for a plot. We haven’tcreated anything yet, hence no plot is visible.

22 / 36

Page 23: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

What do these output functionsreturn?

plotOutput(outputId = "hist")

Some HTML!

<div id="hist" class="shiny-plot-output" style="width: 100% ; height: 400

23 / 36

Page 24: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

User interface review

Build the user interface inside function fluidPage() and save it as an object namedui.

Function fluidPage() scales its components in realtime to fill all available browserwidth - dynamic HTML user interface.

Build inputs with *Input(inputId, label, ...).

Build outputs with *Output(outputId, ...).

Separate multiple inputs and outputs with commas.

Run your app after each added input or output to minimize complications later on.

24 / 36

Page 25: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Beyond the UI

You have a user interface built. Why does it not do anything?

You need to give R commands that react when inputs are provided or are changed. Thesereactions are seen by updates to the outputs. Take a look athttps://shiny.rstudio.com/gallery/tabsets.html. As you change inputs, look at what ishighlighted in function server().

This is where function server(), that you create, will come into play.

25 / 36

Page 26: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

ServerServer

26 / 3626 / 36

Page 27: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Function server()

server <- function(input, output) {

}

This function plays a special role in the Shiny process; it builds a list-like object namedoutput that contains all of the code needed to update the R objects in your app. Each Robject needs to have its own entry in the list.

You can create an entry by defining a new element for output within the server function. Theelement name should match the name of the reactive element that you created in the userinterface. This is where inputId and outputId come into play.

27 / 36

Page 28: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Steps to create the server()function

1. Save objects to display to output$<outputId>, where <outputId> is the namegiven from function *Output().

server <- function(input, output) { output$hist <- # code}

2. Generally, build these output$<outputId> objects with the family of functionsrender*().

server <- function(input, output) { output$hist <- renderPlot({ # code to build your object # in this case, code to create # the histogram }) }

3. Access your input values with input$<inputId>, where <inputID> is the namegiven from function *Input().

28 / 36

Page 29: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Render functions

Render function Creates a reactive

renderDataTable() data table

renderImage() image

renderPlot() plot

renderPrint() version of the given function that captures print output

renderTable() table

renderText() version of the given function to turn its result into a charactervector.

renderUI() HTML

29 / 36

Page 30: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Render and Output connection

Each render*() function only requires a single argument: an R expression surrounded bybraces, { }. The expression can be one simple line of code, or it can involve many.

30 / 36

Page 31: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Reactivity

Assuming a well-built Shiny app, every time the user moves the slider, selects a value in acombo box, selects a new radio button option, outputs will automatically get updated wheninputs change.

This is known as reactivity. Reactivity automatically occurs whenever you use an input valueto render an output object.

31 / 36

Page 32: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Function server() review

The server function does the work in terms of building and rebuilding R objects thatultimately get displayed to the user in the user interface.

Save output you build to output$<outputId>.

Build output with a render*() function.

Access inputs with input$<inputId>.

Multiple outputs can be placed in the server function.

Reactivity happens automatically when you use inputs to build rendered outputs.

32 / 36

Page 33: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Share your appShare your app

33 / 3633 / 36

Page 34: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

Upload it to shinyapps.io

34 / 36

Page 35: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

1. Create a free account athttps://www.shinyapps.io/.

2. Build your Shiny app.

3. Publish your app.

What you get with a free account:

5 active applications

25 hours per month of active use

Distribute your app

35 / 36

Page 36: R Shiny Part I · R Shiny Part I Statistical Computing & Programming Shawn Santo 06-08-20 Supplementar y materials Companion videos Introduction to R Shiny Building the UI Creating

References

Shiny. (2019). Shiny.rstudio.com. https://shiny.rstudio.com/

36 / 36