BUILDING WEB APPLICATIONS IN R WITH SHINY
Reactive flow
Building Web Applications in R
with Shiny
Reactivity, in spreadsheets
Building Web Applications in R
with Shiny
Reactivity, in spreadsheets
Building Web Applications in R
with Shiny
Reactivity, in spreadsheets
Building Web Applications in R
with Shiny
Reactivity, in spreadsheets
Building Web Applications in R
with Shiny
Reactivity, in spreadsheets
Building Web Applications in R
with Shiny
Reactions
The input$ list stores the current value of each input
object under its name.
# Set alpha level
sliderInput(inputId = "alpha",
input$alpha = 0.2
label = "Alpha:",
min = 0, max = 1,
value = 0.5)
input$alpha = 0.5
input$alpha
input$alpha = 0.8
Building Web Applications in R
with Shiny
Reactivity 101
Reactivity automatically occurs when an input value
is used to render an output object.
# Define server function required to create the scatterplot
server <- function(input, output) {
# Create the scatterplot object the plotOutput function is expecting
output$scatterplot <- renderPlot({
ggplot(data = movies, aes_string(x = input$x, y = input$y)) +
geom_point(alpha = input$alpha)
})
}
Building Web Applications in R
with Shiny
Reactive flow
Schedule updates
invalidateLater()
Trigger arbitrary code
observeEvent()
observe()
Modularize
run(this) Prevent
reactions reactions
reactive() isolate()
input$x expression() output$y
Create your Render
own reactive values reactive output
reactiveValues() Update render*()
reactiveFileReader()
reactivePoll() Delay reactions
*Input() eventReactive()
Building Web Applications in R
with Shiny
Reactive flow, simplified
input$x expression() output$y
Create your Render
own reactive values reactive output
*Input() Update render*()
BUILDING WEB APPLICATIONS IN R WITH SHINY
Let's practice!
BUILDING WEB APPLICATIONS IN R WITH SHINY
UI inputs
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
checkboxInput
Add a checkbox input to specify whether the data plotted
should be shown in a data table.
1. ui: Add an input widget that the user can interact with
to check/uncheck the box.
2. ui: Add an output defining where the data table should
appear.
3. server: Add a reactive expression that creates the
data table if the checkbox is checked.
Building Web Applications in R
with Shiny
checkboxInput
Add a checkbox input to specify whether the data plotted
should be shown in a data table.
1. ui: Add an input widget that the user can interact with
to check/uncheck the box.
# Show data table
checkboxInput(inputId = "show_data",
label = "Show data table",
value = TRUE)
Building Web Applications in R
with Shiny
Watch for commas!
sidebarPanel(
# Select variable for y-axis
selectInput(inputId = "y", label = "Y-axis:",
choices = c("imdb_rating", "imdb_num_votes", "critics_score",
"audience_score", "runtime"),
selected = "audience_score"),
# Select variable for x-axis
selectInput(inputId = "x", label = "X-axis:",
choices = c("imdb_rating", "imdb_num_votes", "critics_score",
"audience_score", "runtime"),
selected = "critics_score"),
# Show data table
checkboxInput(inputId = "show_data",
label = "Show data table",
value = TRUE)
)
Building Web Applications in R
with Shiny
checkboxInput
Add a checkbox input to specify whether the data plotted
should be shown in a data table.
2. ui: Add an output to the UI defining where the data
table should appear.
mainPanel(
# Show scatterplot
plotOutput(outputId = "scatterplot"),
# Show data table
DT::dataTableOutput(outputId = "moviestable")
)
Building Web Applications in R
with Shiny
checkboxInput
Add a checkbox input to specify whether the data plotted
should be shown in a data table.
3. server: Add a reactive expression that creates the
data table if the checkbox is checked.
# Print data table if checked
output$moviestable <- DT::renderDataTable({
if(input$show_data){
DT::datatable(data = movies %>% select(1:7),
options = list(pageLength = 10),
rownames = FALSE)
}
})
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
Scoping
● We saw that the data loaded on top of the Shiny app
is visible to the server.
● It is also visible to the UI.
# Display number of observations
HTML(paste0("The dataset has ", nrow(movies),
“observations."))
BUILDING WEB APPLICATIONS IN R WITH SHINY
Let's practice!
BUILDING WEB APPLICATIONS IN R WITH SHINY
Rendering functions
Building Web Applications in R
with Shiny
works
with
Building Web Applications in R
with Shiny
works
with
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
1. Calculate the new variable.
2. ui: Add an input widget that the user can interact with to
check boxes for selected title types.
3. ui: Add an output defining where the summary table should
appear.
4. server: Add a reactive expression that creates the summary
table.
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
1. Calculate the new variable.
# Create new variable:
# ratio of critics and audience scores
movies <- movies %>%
mutate(score_ratio = audience_score / critics_score)
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
2. ui: Add an input widget that the user can interact with to
check boxes for selected title types.
# Subset for title types
checkboxGroupInput(inputId = "selected_title_type",
label = "Select title type:",
choices = levels(movies$title_type),
selected = levels(movies$title_type))
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
3. ui: Add an output defining where the summary table should
appear.
mainPanel(
# Show scatterplot
plotOutput(outputId = "scatterplot"),
# Show data table
tableOutput(outputId = "summarytable")
)
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
4. server: Add a reactive expression that creates the summary
table.
output$summarytable <- renderTable(
{movies %>%
filter(title_type %in% input$selected_title_type) %>%
group_by(mpaa_rating) %>%
summarise(Mean = mean(score_ratio), SD = sd(score_ratio), n = n())},
striped = TRUE, spacing = "l", align = "lccr", digits = 4, width = "90%",
caption = "Score ratio (audience / critics' scores) summary statistics by
MPAA rating."
)
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
renderTable
Add a table beneath the plot displaying summary statistics for
a new variable: score_ratio = audience_score / critics_score.
4. server: Add a reactive expression that creates the summary
table.
output$summarytable <- renderTable(
{movies %>%
filter(title_type %in% input$selected_title_type) %>%
group_by(mpaa_rating) %>%
summarise(Mean = mean(score_ratio), SD = sd(score_ratio), n = n())},
striped = TRUE, spacing = "l", align = "lccr", digits = 4, width = "90%",
caption = "Score ratio (audience / critics' scores) summary statistics by
MPAA rating."
)
Building Web Applications in R
with Shiny
Recap
● Shiny has a variety of render* functions with
corresponding *Output functions to create and
display outputs.
● render* functions can take on multiple arguments,
the first being the expression for the desired output.
● The expression in the render* function should be
wrapped in curly braces.
BUILDING WEB APPLICATIONS IN R WITH SHINY
Let's practice!
BUILDING WEB APPLICATIONS IN R WITH SHINY
UI outputs
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
Building Web Applications in R
with Shiny
plotOutput
Select points on the plot via brushing, and report the selected
points in a data table underneath the plot.
1. ui: Add functionality to plotOutput to select points
via brushing.
2. ui: Add an output defining where the data table should
appear.
3. server: Add a reactive expression that creates the
data table for the selected points.
Building Web Applications in R
with Shiny
plotOutput
Select points on the plot via brushing, and report the selected
points in a data table underneath the plot.
1. ui: Add functionality to plotOutput to select points
via brushing.
# Show scatterplot with brushing capability
plotOutput(outputId = "scatterplot", brush = "plot_brush")
Building Web Applications in R
with Shiny
plotOutput
Select points on the plot via brushing, and report the selected
points in a data table underneath the plot.
2. ui: Add an output defining where the data table should
appear.
# Show data table
DT::dataTableOutput(outputId = "moviestable")
Building Web Applications in R
with Shiny
plotOutput
Select points on the plot via brushing, and report the selected
points in a data table underneath the plot.
3. server: Add a reactive expression that creates the
data table for the selected points.
# Print data table
output$moviestable <- DT::renderDataTable({
brushedPoints(movies, input$plot_brush) %>%
select(title, audience_score, critics_score)
})
BUILDING WEB APPLICATIONS IN R WITH SHINY
Let's practice!