URP_course

This project is maintained by sarbal

Lesson 5: So shiny!

Let’s make something interactive! Start off by installing the shiny package:

install.packages("shiny")

And then downloading this file:

What’s Shiny, precious, eh?

Two main functions: ui and server

server <- function(input,output,session) {
  # Reactive input 
  observeEvent( input$add,{
    x <- as.numeric(input$one)
    y <- as.numeric(input$two)
    title <- as.character(input$caption)
    
    # Reactive expressions
    n <- x+y
    d <- round(abs(rnorm(n)  ) * n )
    m <- mean(d)
    sdd <- sd(d)
    bins <- seq(min(d), max(d), length.out = input$bins + 1)
      
    # Reactive output
    output$check <- renderPrint("Done!")
    output$distPlot <- renderPlot({
      
      # Draw the histogram with the specified number of bins
      hist(d, breaks = bins, freq=F, col = 'darkgray', border = 'white', main=title)
      ld <- density(d)
      lines(ld, col=4) 
      abline(v=m, lty=2, lwd=3, col=4)      
      if (input$obs) { rug(d) }
      
    })
    output$table <- renderTable({
      data = cbind(n,m, sdd)
      return( data ) 
    })
    
  })
)

Run!

shinyApp(ui = ui, server = server)

Widgets (input)

function widget
actionButton Action Button
checkboxGroupInput A group of check boxes
checkboxInput A single check box
dateInput A calendar to aid date selection
dateRangeInput A pair of calendars for selecting a date range
fileInput A file upload control wizard
helpText Help text that can be added to an input form
numericInput A field to enter numbers
radioButtons A set of radio buttons
selectInput A box with choices to select from
sliderInput A slider bar
submitButton A submit button
textInput A field to enter text

Output functions

Output function Creates
dataTableOutput DataTable
htmlOutput raw HTML
imageOutput image
plotOutput plot
ableOutput table
textOutput text
uiOutput raw HTML
verbatimTextOutput text

Render functions

render function Creates
renderDataTable DataTable
renderImage images (saved as a link to a source file)
renderPlot plots
renderPrint any printed output
renderTable data frame, matrix, other table like structures
renderText character strings
renderUI a Shiny tag object or HTML

Easy as 1, 2, 3, infinity

  1. Install it!
    install.packages("shiny") 
    
  2. Load it!
    library(shiny)
    
  3. RStudio makes it very easy to build an app. Simply click on the “File” dropdown menu, then “New File” and then “Shiny Web App…”. A pop up box will ask you for an “Application name”, call your app whatever you wish (e.g., my_app). Select the “Single File (app.R)” radio button. And then pick your working directory (click Browse on the final box). When you are ready, click “Create”.
  4. This will generate a folder with your app name, and a file called “app.R”. We will be working with this file. It should have two functions: ui and server. They should be pre-filled with a historgram drawing app. You can test it out by running in the command console (make sure you are in the working directory where your app is):
    runApp("my_app")
    
  5. We can modify the different bits of code in the ui and server functions to change the display and functionality of the code.

  6. Play around!

Back to the homepage