3 Lesson 2
How to customize reactions
3.1 Example #1
#L02_Script01_Example1
library(shiny)
<- fluidPage(
ui textInput("name", "What's your name?"),
textOutput("greeting")
)<- function(input, output, session) {
server $greeting <- renderText({
outputpaste0("Hello ", input$name, "!")
})
}shinyApp(ui, server)
3.2 render*()
#L02_Script02_Render
library(shiny)
<- fluidPage(
ui sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
textInput(inputId = "title",
label = "Write a title",
value = "Histogram of Random Normal Values"),
plotOutput("hist")
)<- function(input, output) {
server $hist <- renderPlot({
outputhist(rnorm(input$num), main = input$title)
})
}shinyApp(ui = ui, server = server)
3.3 reactive()
#L02_Script03_Reactive
library(shiny)
<- fluidPage(
ui sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
plotOutput("hist"),
verbatimTextOutput("stats")
)
# before reactive call
<- function(input, output) {
server $hist <- renderPlot({
outputhist(rnorm(input$num))
})$stats <- renderPrint({
outputsummary(rnorm(input$num))
})
}
# after reactive call
<- function(input, output) {
server <- reactive({
data rnorm(input$num)
})$hist <- renderPlot({
outputhist(data())
})$stats <- renderPrint({
outputsummary(data())
})
}
shinyApp(ui = ui, server = server)
3.4 isolate()
#L02_Script04_Isolate
library(shiny)
<- fluidPage(
ui sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
textInput(inputId = "title",
label = "Write a title",
value = "Histogram of Random Normal Values"),
plotOutput("hist")
)<- function(input, output) {
server $hist <- renderPlot({
outputhist(rnorm(input$num)
main = isolate({input$title}))
,
})
}shinyApp(ui = ui, server = server)
3.5 observeEvent()
#L02_Script05_observeEvent
library(shiny)
<- fluidPage(
ui actionButton(inputId = "clicks",
label = "Click me")
)<- function(input, output) {
server observeEvent(input$clicks
showNotification(input$clicks))
,
}
shinyApp(ui = ui, server = server)
3.6 eventReactive()
#L02_Script06_eventReactive
library(shiny)
<- fluidPage(
ui sliderInput(inputId = "num",
label = "Choose a number",
value = 25, min = 1, max = 100),
actionButton(inputId = "go",
label = "Update"),
plotOutput("hist")
)<- function(input, output) {
server <- eventReactive(input$go, {
data rnorm(input$num)
})$hist <- renderPlot({
outputhist(data())
})
}shinyApp(ui = ui, server = server)
3.7 reactiveValues()
#L02_Script07_reactiveValues
library(shiny)
<- fluidPage(
ui actionButton("up", "up"),
actionButton("down", "down"),
textOutput("n")
)<- function(input, output, session) {
server <- reactiveValues(n = 0)
r observeEvent(input$up, {
$n <- r$n + 1
r
})observeEvent(input$down, {
$n <- r$n - 1
r
})
$n <- renderText(r$n)
output
}shinyApp(ui = ui, server = server)
3.8 Practice Problem #1
3.8.1 Question
#L02_Script08_PPQuestion01
#library(shiny)
<- fluidPage(
ui numericInput("x", "x", value = 50, min = 0, max = 100),
actionButton("capture", "capture"),
textOutput("out")
)
<- function(input, output, server) {
server $greeting <- renderText(paste0("Hello ", name))
input
}
<- function(input, output, server) {
server <- paste0("Hello ", input$name)
greeting $greeting <- renderText(greeting)
output
}
<- function(input, output, server) {
server $greting <- paste0("Hello", input$name)
output
}
#shinyApp(ui = ui, server = server)
3.9 Practice Problem #2
3.9.1 Question
#L02_Script09_PPQuestion02
#library(shiny)
<- fluidPage(
ui numericInput("x", "x", value = 50, min = 0, max = 100),
actionButton("capture", "capture"),
textOutput("out")
)
#shinyApp(ui = ui, server = server)
3.9.2 Solution
#L02_Script10_PPSolution02
library(shiny)
<- fluidPage(
ui numericInput("x", "x", value = 50, min = 0, max = 100),
actionButton("capture", "capture"),
textOutput("out")
)
<- function(input, output) {
server $out <- eventReactive(input$capture, {
output$x
input
})
}
shinyApp(ui = ui, server = server)
3.10 Practice Problem #3
3.10.1 Question
#L02_Script11_PPQuestion03
#library(shiny)
<- fluidPage(
ui actionButton(inputId = "norm", label = "Normal"),
actionButton(inputId = "unif", label = "Uniform"),
plotOutput("hist")
)
#shinyApp(ui = ui, server = server)
3.10.2 Solution
#L02_Script12_PPSolution03
library(shiny)
<- fluidPage(
ui actionButton(inputId = "norm", label = "Normal"),
actionButton(inputId = "unif", label = "Uniform"),
plotOutput("hist")
)<- function(input, output) {
server <- reactiveValues(data = rnorm(100))
rv observeEvent(input$norm, { rv$data <- rnorm(100) })
observeEvent(input$unif, { rv$data <- runif(100) })
$hist <- renderPlot({
outputhist(rv$data)
})
}
shinyApp(ui = ui, server = server)