I have a shiny code that generates selectInputs and each of those selectInput generate the plot title. The problem is that I don't know how to trigger an observe() with dynamically generated buttons. The workaround I used was to write on the code the input[[]] trigger for each selectInput to start the observe. Is it possible to trigger the observe() from all generated inputs?
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(title = "Dynamic selectInput"),
dashboardSidebar(
sidebarMenu(
menuItemOutput("menuitem")
)
),
dashboardBody(
numericInput("graph_tytle_num","Number of Graph Title elements",value = 1,min = 1,max = 10),
uiOutput("graph_title"),
plotOutput("plot")
)
)
server <- function(input, output, session) {
output$menuitem <- renderMenu({
menuItem("Menu item", icon = icon("calendar"))
})
#elements of graphic titles
output$graph_title <- renderUI({
buttons <- as.list(1:input$graph_tytle_num)
buttons <- lapply(buttons, function(i)
column(3,
selectInput(inputId = paste0("title_element",i),
label = paste("Title element",i),
choices = paste0(LETTERS[i],seq(1,i*2)),
selected = 1)
)
)
})
observe({
#Can this observe be triggerd by the dynamicaly generate selectInput?
#In this the observe is only triggered with the first 3 selectInput
input[[paste0("title_element",1)]]
input[[paste0("title_element",2)]]
input[[paste0("title_element",3)]]
isolate({ #I dont want to have the numericInput input$graph_tytle_num to be a trigger
#Create the graph title
title <- c()
for(i in 1:input[["graph_tytle_num"]]){
title <- paste(title,input[[paste0("title_element",i)]])
}
output$plot <-renderPlot({hist(rnorm(100,4,1),
breaks = 10,
main = title)})
})
})
}
shinyApp(ui, server)
See Question&Answers more detail:os