R取决于闪亮的selectInput

时间:2018-10-23 13:18:25

标签: r shiny

我找到了几个大致相似的主题,但无法弄清楚如何解决我的问题,所以请寻求帮助:

我有两个selectInput,其中第二个应该取决于第一个。标签和值(我需要绘制图形)来自data.frame。如何根据第二个selectInput中的选择来限制选项以及第二个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)

编辑

对于最小示例数据集,@ 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))})

0 个答案:

没有答案