Я нашел несколько похожих тем, но не смог понять, как решить мою проблему, поэтому прошу помощи:
У меня есть два selectInput
, где второе должно зависеть от первого,Метки и значения (которые мне нужны для построения графика) взяты из data.frame.Как я могу ограничить параметры и, следовательно, значения во втором selectInput, в зависимости от выбора, сделанного в первом?
Я пытался использовать observeEvent
, но чего-то не хватало.Вот минимальный пример:
library(shiny)
method1 <- c("A","A","B","B","C","C")
value1 <- c(1,1,2,2,3,3)
method2 <- c("X","Y","X","Y","X","Y")
value2 <- c(1,2,3,4,5,6)
df <- data.frame(method1, value1, method2, value2)
val1 <- setNames(df$value1, df$method1)
ui <- fluidPage(
sidebarPanel(
selectInput("m1",
"Method1",
choices = val1,
selected = "A"),
selectInput("m2",
"Method2",
choices = NULL)))
server <- function(input, output, session) {
observeEvent(input$m1,{
updateSelectInput(session,'m2',
choices=setNames(df$value2[df$method1==input$m1], df$method2[df$method1==input$m1]))})}
shinyApp(ui = ui, server = server)
EDIT
Для минимального примера набора данных @brittenbs предлагает заменить df$method1 == input$m1
на df$value1 == as.numeric(input$m1)
, чтобы решить проблему.
Для моего большего набора данных из реальной жизни я использовал обходной путь, построив реактивный набор данных
dft <- reactive({df %>% filter(value1 == as.numeric(input$m1))})
и назвав его в observeEvent
observeEvent(input$m1,{ updateSelectInput(session,'m2', choices=setNames(dft()$value2, dft()$method2))})