R блестящий зависимый selectInput - PullRequest
0 голосов
/ 23 октября 2018

Я нашел несколько похожих тем, но не смог понять, как решить мою проблему, поэтому прошу помощи:

У меня есть два 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))})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...