84 lines
2.1 KiB
R
84 lines
2.1 KiB
R
library(shiny)
|
|
library(bslib)
|
|
|
|
# Define UI for slider demo app ----
|
|
ui <- page_sidebar(
|
|
|
|
# App title ----
|
|
title = "More Widgets",
|
|
|
|
# Sidebar panel for inputs ----
|
|
sidebar = sidebar(
|
|
|
|
# Input: Select a dataset ----
|
|
selectInput(
|
|
"dataset",
|
|
"Choose a dataset:",
|
|
choices = c("rock", "pressure", "cars")
|
|
),
|
|
|
|
# Input: Specify the number of observations to view ----
|
|
numericInput("obs", "Number of observations to view:", 10),
|
|
|
|
# Include clarifying text ----
|
|
helpText(
|
|
"Note: while the data view will show only the specified",
|
|
"number of observations, the summary will still be based",
|
|
"on the full dataset."
|
|
),
|
|
|
|
# Input: actionButton() to defer the rendering of output ----
|
|
# until the user explicitly clicks the button (rather than
|
|
# doing it immediately when inputs change). This is useful if
|
|
# the computations required to render output are inordinately
|
|
# time-consuming.
|
|
actionButton("update", "Update View")
|
|
),
|
|
|
|
# Output: Header + summary of distribution ----
|
|
h4("Summary"),
|
|
verbatimTextOutput("summary"),
|
|
|
|
# Output: Header + table of distribution ----
|
|
h4("Observations"),
|
|
tableOutput("view")
|
|
)
|
|
|
|
# Define server logic to summarize and view selected dataset ----
|
|
server <- function(input, output) {
|
|
|
|
# Return the requested dataset ----
|
|
# Note that we use eventReactive() here, which depends on
|
|
# input$update (the action button), so that the output is only
|
|
# updated when the user clicks the button
|
|
datasetInput <- eventReactive(
|
|
input$update,
|
|
{
|
|
switch(
|
|
input$dataset,
|
|
"rock" = rock,
|
|
"pressure" = pressure,
|
|
"cars" = cars
|
|
)
|
|
},
|
|
ignoreNULL = FALSE
|
|
)
|
|
|
|
# Generate a summary of the dataset ----
|
|
output$summary <- renderPrint({
|
|
dataset <- datasetInput()
|
|
summary(dataset)
|
|
})
|
|
|
|
# Show the first "n" observations ----
|
|
# The use of isolate() is necessary because we don't want the table
|
|
# to update whenever input$obs changes (only when the user clicks
|
|
# the action button)
|
|
output$view <- renderTable({
|
|
head(datasetInput(), n = isolate(input$obs))
|
|
})
|
|
}
|
|
|
|
# Create Shiny app ----
|
|
shinyApp(ui, server)
|