I want to be able to update the selection available in the pickerInput based upon the selection made in the radio button input. In the example below, I want the radio button "A", to give a pickerInput list of mtcars$cyl, whilst a picker input of "B" to give a picker input of mtcars$mpg
I have tried doing this using if statements, but I haven't got anywhere so far. Reproducible example below:
library(shiny)
library(leaflet)
library(shinyjs)
library(rgeos)
library(tidyverse)
library(openxlsx)
library(plotly)
library(shinyWidgets)
library(rgdal)
ui <- fluidPage(shinyjs::useShinyjs(),
fluidRow(column(
6,radioButtons("type", "Type:",
c("A" = "norm",
"B" = "unif")))),
fluidRow(column(
3,
pickerInput("regInput","Region",choices=unique(mtcars$cyl),
options = list(`actions-box` = TRUE),multiple = T,
selected = unique(mtcars$cyl)))))
server <- function (input, output, session) {
observeEvent(input$type,{
a_option <- input$regInput
if (a_option == "B") {
updatePickerInput(session = session,inputId = "regInput",
choices =unique(mtcars$mpg))}})
}
shinyApp(ui = ui, server = server)
CodePudding user response:
As said in the other answer you need to observe input$type
and update the picker input according to the values in it. Also, it's important to include an else statement, to be able to update the picker input when the user picks between the radio button choices multiple times. Finally, on the updatePickerInput
you need to include the selected argument to maintain the behaviour as it is on the ui.
Here's the code doing what I've described above:
library(shiny)
library(shinyjs)
library(tidyverse)
library(shinyWidgets)
ui <- fluidPage(shinyjs::useShinyjs(),
fluidRow(
column(
6,
radioButtons("type",
"Type:",
c("A" = "norm",
"B" = "unif"))
)),
fluidRow(
column(
3,
pickerInput("regInput","Region",
choices=unique(mtcars$cyl),
options = list(`actions-box` = TRUE),
multiple = T,
selected = unique(mtcars$cyl))
))
)
server <- function (input, output, session) {
observeEvent(input$type,{
if (input$type == "unif") {
updatePickerInput(session = session,inputId = "regInput",
choices = unique(mtcars$mpg),
selected = unique(mtcars$mpg))
} else {
updatePickerInput(session = session,inputId = "regInput",
choices = unique(mtcars$cyl),
selected = unique(mtcars$cyl))
}
})
}
shinyApp(ui = ui, server = server)
CodePudding user response:
The server has to listen to the right UI Element (ID = "type" for the radio buttons in question). Currently it observes an undefined element "dist".
Try changing
observeEvent(input$dist, { code })
to
observeEvent(input$type, { code })