观察基于第一个选择的updateSelectInput

Big*_*ist 5 select r input shiny

我的server.R具有以下代码,我希望我的Shiny应用程序可以根据“国家/地区选择”来选择“州”,但是它在第二行中显示了所有州。我猜这里,observe只是观察到不执行任何操作。

  shinyServer(function(input, output, session) {

      observe({
          ddf = df[df$Date>=input$daterange[1] & df$Date<=input$daterange[2],]
          updateSelectInput(session, "Country", choices = ddf$Country)
          ddf1 = subset(ddf, grepl(input$Country, ddf$State))
          updateSelectInput(session, "State", choices =  ddf1$State)  
            })

    }
Run Code Online (Sandbox Code Playgroud)

基于以上选择,我想传递一些数据框进行绘图。当我选择其他国家/地区时,它将更改状态列表一秒钟,然后返回所有第一国家/地区的状态列表。如果有人可以在此举一个例子,我真的很感激。我的ui.R代码如下

 sidebarPanel(
    wellPanel(dateRangeInput("daterange", "Date range:",
                      Sys.Date()-10,
                      Sys.Date()+10)),
    wellPanel(selectInput("Country", "Select a Country:",
                          '')),
    wellPanel(selectInput("State", "Select a State:",
                          '')))
Run Code Online (Sandbox Code Playgroud)

Sté*_*ent 5

我认为您的观察者中可能有冲突,因为其中包含输入input$Country的更新程序Country。然后,我尝试将其拆分为两个观察者,并使用电抗性导体ddf仅制造一次。

get_ddf <- reactive({
  df[df$Date>=input$daterange[1] & df$Date<=input$daterange[2],]
})
observe({
  updateSelectInput(session, "Country", choices = get_ddf()$Country)
})
observe({
  ddf1 = subset(get_ddf(), grepl(input$Country, get_ddf()$State))
  updateSelectInput(session, "State", choices =  ddf1$State)  
})
Run Code Online (Sandbox Code Playgroud)

此外,您是否不应该在choices参数中使用列的级别而不是列本身?

observe({
  updateSelectInput(session, "Country", choices = levels(droplevels(get_ddf()$Country)))
})
observe({
  ddf1 = droplevels(subset(get_ddf(), grepl(input$Country, get_ddf()$State)))
  updateSelectInput(session, "State", choices =  levels(ddf1$State))  
})
Run Code Online (Sandbox Code Playgroud)

如果CountryState列不是因素而是字符,请使用unique()代替levels(droplevels())