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