Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save johndrummond/0bbc846da698e0b7e84bff9d2871ae0b to your computer and use it in GitHub Desktop.
Save johndrummond/0bbc846da698e0b7e84bff9d2871ae0b to your computer and use it in GitHub Desktop.
compare observeEvent to observe plus isolate in a shiny app
# oberveEvent includes the ability of the first parameter to be an expression. But if the return value of that expression is
# null, the ignore null setting blocks updates, even though other parts of the expression are updating.
# in the example below with the default settings, button Event1 will only trigger the update of "observeEvent either button"
# after Event2 has been pushed at least once
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Observers"),
actionButton("event1", "Event 1"),
actionButton("event2", "Event 2"),
p("reactiveout",verbatimTextOutput("reactiveout", placeholder = TRUE)),
p("setWithinReactive",verbatimTextOutput("setWithinReactive", placeholder = TRUE)),
p("observeEvent either button",verbatimTextOutput("observeEventOut", placeholder = TRUE)),
p("observe either button",verbatimTextOutput("observeOut", placeholder = TRUE)),
p("buttonClicked observeEvent",verbatimTextOutput("buttonClicked", placeholder = TRUE))
)
# Define server logic required to draw a histogram
server <- function(input, output) {
observeEvent(input$event1,
{
resultstr <- paste("button 1", input$event1, input$event2)
output$buttonClicked <- renderText({resultstr})
})
observeEvent(input$event2,
{
resultstr <- paste("button 2", input$event1, input$event2)
output$buttonClicked <- renderText({resultstr})
})
observeEvent({
input$event1
input$event2
},
{
resultstr <- paste("button 1 or 2", input$event1, input$event2)
output$observeEventOut <- renderText({resultstr})
})
observe({
input$event1
input$event2
isolate({
resultstr <- paste("observe 1 or 2", input$event1, input$event2)
output$observeOut <- renderText({resultstr})
})})
fromreactive <- reactive({
resultstr <- paste("button 1 or 2", input$event1, input$event2)
output$setWithinReactive <- renderText({fromreactive()})
resultstr
})
output$reactiveout <- renderText({fromreactive()})
}
# Run the application
shinyApp(ui = ui, server = server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment