103 lines
3.0 KiB
R
103 lines
3.0 KiB
R
library(shiny)
|
|
|
|
# Define UI for dataset viewer app ----
|
|
ui <- fluidPage(
|
|
|
|
# App title ----
|
|
titlePanel("Reactivity"),
|
|
|
|
# Sidebar layout with input and output definitions ----
|
|
sidebarLayout(
|
|
|
|
# Sidebar panel for inputs ----
|
|
sidebarPanel(
|
|
|
|
# Input: Text for providing a caption ----
|
|
# Note: Changes made to the caption in the textInput control
|
|
# are updated in the output area immediately as you type
|
|
textInput(inputId = "caption",
|
|
label = "Caption:",
|
|
value = "Data Summary"),
|
|
|
|
# Input: Selector for choosing dataset ----
|
|
selectInput(inputId = "dataset",
|
|
label = "Choose a dataset:",
|
|
choices = c("rock", "pressure", "cars")),
|
|
|
|
# Input: Numeric entry for number of obs to view ----
|
|
numericInput(inputId = "obs",
|
|
label = "Number of observations to view:",
|
|
value = 10)
|
|
|
|
),
|
|
|
|
# Main panel for displaying outputs ----
|
|
mainPanel(
|
|
|
|
# Output: Formatted text for caption ----
|
|
h3(textOutput("caption", container = span)),
|
|
|
|
# Output: Verbatim text for data summary ----
|
|
verbatimTextOutput("summary"),
|
|
|
|
# Output: HTML table with requested number of observations ----
|
|
tableOutput("view")
|
|
|
|
)
|
|
)
|
|
)
|
|
|
|
# Define server logic to summarize and view selected dataset ----
|
|
server <- function(input, output) {
|
|
|
|
# Return the requested dataset ----
|
|
# By declaring datasetInput as a reactive expression we ensure
|
|
# that:
|
|
#
|
|
# 1. It is only called when the inputs it depends on changes
|
|
# 2. The computation and result are shared by all the callers,
|
|
# i.e. it only executes a single time
|
|
datasetInput <- reactive({
|
|
switch(input$dataset,
|
|
"rock" = rock,
|
|
"pressure" = pressure,
|
|
"cars" = cars)
|
|
})
|
|
|
|
# Create caption ----
|
|
# The output$caption is computed based on a reactive expression
|
|
# that returns input$caption. When the user changes the
|
|
# "caption" field:
|
|
#
|
|
# 1. This function is automatically called to recompute the output
|
|
# 2. New caption is pushed back to the browser for re-display
|
|
#
|
|
# Note that because the data-oriented reactive expressions
|
|
# below don't depend on input$caption, those expressions are
|
|
# NOT called when input$caption changes
|
|
output$caption <- renderText({
|
|
input$caption
|
|
})
|
|
|
|
# Generate a summary of the dataset ----
|
|
# The output$summary depends on the datasetInput reactive
|
|
# expression, so will be re-executed whenever datasetInput is
|
|
# invalidated, i.e. whenever the input$dataset changes
|
|
output$summary <- renderPrint({
|
|
dataset <- datasetInput()
|
|
summary(dataset)
|
|
})
|
|
|
|
# Show the first "n" observations ----
|
|
# The output$view depends on both the databaseInput reactive
|
|
# expression and input$obs, so it will be re-executed whenever
|
|
# input$dataset or input$obs is changed
|
|
output$view <- renderTable({
|
|
head(datasetInput(), n = input$obs)
|
|
})
|
|
|
|
}
|
|
|
|
# Create Shiny app ----
|
|
shinyApp(ui, server)
|