mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-29 00:38:19 -05:00
102 lines
3.1 KiB
Markdown
102 lines
3.1 KiB
Markdown
|
|
|
|

|
|
|
|
|
|
To run the example type:
|
|
|
|
<pre><code class="console">> library(shiny)
|
|
> runExample("03_reactivity")
|
|
</code></pre>
|
|
|
|
#### ui.R
|
|
|
|
<pre><code class="r">library(shiny)
|
|
|
|
# Define UI for dataset viewer application
|
|
shinyUI(pageWithSidebar(
|
|
|
|
# Application title
|
|
headerPanel("Reactivity"),
|
|
|
|
# Sidebar with controls to provide a caption, select a dataset, and
|
|
# specify the number of observations to view. Note that changes made
|
|
# to the caption in the textInput control are updated in the output
|
|
# area immediately as you type
|
|
sidebarPanel(
|
|
textInput("caption", "Caption:", "Data Summary"),
|
|
|
|
selectInput("dataset", "Choose a dataset:",
|
|
choices = c("rock", "pressure", "cars")),
|
|
|
|
numericInput("obs", "Number of observations to view:", 10)
|
|
),
|
|
|
|
|
|
# Show the caption, a summary of the dataset and an HTML table with
|
|
# the requested number of observations
|
|
mainPanel(
|
|
h3(textOutput("caption")),
|
|
|
|
verbatimTextOutput("summary"),
|
|
|
|
tableOutput("view")
|
|
)
|
|
))
|
|
</code></pre>
|
|
|
|
#### server.R
|
|
|
|
<pre><code class="r">library(shiny)
|
|
library(datasets)
|
|
|
|
# Define server logic required to summarize and view the selected dataset
|
|
shinyServer(function(input, output) {
|
|
|
|
# By declaring databaseInput as a reactive function 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 (it
|
|
# only executes a single time)
|
|
# 3) When the inputs change and the function is re-executed, the
|
|
# new result is compared to the previous result; if the two are
|
|
# identical, then the callers are not notified
|
|
#
|
|
datasetInput <- reactive(function() {
|
|
switch(input$dataset,
|
|
"rock" = rock,
|
|
"pressure" = pressure,
|
|
"cars" = cars)
|
|
})
|
|
|
|
# The output$caption is computed based on a reactive function that
|
|
# returns input$caption. When the user changes the "caption" field:
|
|
#
|
|
# 1) This function is automatically called to recompute the output
|
|
# 2) The new caption is pushed back to the browser for re-display
|
|
#
|
|
# Note that because the data-oriented reactive functions below don't
|
|
# depend on input$caption, those functions are NOT called when
|
|
# input$caption changes.
|
|
output$caption <- reactiveText(function() {
|
|
input$caption
|
|
})
|
|
|
|
# The output$summary depends on the datasetInput reactive function,
|
|
# so will be re-executed whenever datasetInput is re-executed
|
|
# (i.e. whenever the input$dataset changes)
|
|
output$summary <- reactivePrint(function() {
|
|
dataset <- datasetInput()
|
|
summary(dataset)
|
|
})
|
|
|
|
# The output$view depends on both the databaseInput reactive function
|
|
# and input$obs, so will be re-executed whenever input$dataset or
|
|
# input$obs is changed.
|
|
output$view <- reactiveTable(function() {
|
|
obs <- as.integer(input$obs)
|
|
head(datasetInput(), n = obs)
|
|
})
|
|
})
|
|
</code></pre>
|