the original hello-world example makes little practical sense -- it is unclear what really changed when moving the slider, especially when obs is large (we always see a "bell-shaped" histogram)

let's make the number of bins reactive instead; now it is very clear what the slider really controls

a histogram with different number of bins also serves as a good demo of the property of histograms (small bins --> small variance + large bias)
This commit is contained in:
Yihui Xie
2014-02-25 20:44:19 -06:00
parent e7e13ff70d
commit adb444a60f
3 changed files with 27 additions and 29 deletions

View File

@@ -1,5 +1,4 @@
This small Shiny application demonstrates Shiny's automatic UI updates. Move the
*Number of observations* slider and notice how the `renderPlot` expression is
automatically re-evaluated when its dependant, `input$obs`, changes, causing a
new distribution to be generated and the plot to be rendered.
This small Shiny application demonstrates Shiny's automatic UI updates. Move
the *Number of bins* slider and notice how the `renderPlot` expression is
automatically re-evaluated when its dependant, `input$bins`, changes,
causing a histogram with a new number of bins to be rendered.

View File

@@ -1,22 +1,21 @@
library(shiny)
# Define server logic required to generate and plot a random
# distribution
# Define server logic required to draw a histogram
shinyServer(function(input, output) {
# Expression that generates a plot of the distribution. The
# expression is wrapped in a call to renderPlot to indicate
# that:
# Expression that generates a histogram. The expression is
# wrapped in a call to renderPlot to indicate that:
#
# 1) It is "reactive" and therefore should be automatically
# 1) It is "reactive" and therefore should be automatically
# re-executed when inputs change
# 2) Its output type is a plot
#
# 2) Its output type is a plot
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
x <- faithful[, 2] # Old Faithful Geyser data
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
})

View File

@@ -1,21 +1,21 @@
library(shiny)
# Define UI for application that plots random distributions
# Define UI for application that draws a histogram
shinyUI(fluidPage(
# Application title
titlePanel("Hello Shiny!"),
# Sidebar with a slider input for number of observations
# Sidebar with a slider input for the number of bins
sidebarLayout(
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")