r - 根据第一次选择观察 updateSelectInput

标签 r select 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)  
            })

    }

基于以上选择,我想传递一些数据框进行绘图。当我选择不同的国家时,它会更改州列表一秒钟,然后返回所有第一个国家/地区的州列表。如果有人可以在这里展示一个例子,我真的很感激。
我的 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:",
                          '')))

最佳答案

我认为您的观察者中存在冲突,因为它包含 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)  
})

此外,您不应该在 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))  
})

如果CountryState列不是因子而是字符,使用 unique()而不是 levels(droplevels()) .

关于r - 根据第一次选择观察 updateSelectInput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20073948/

相关文章:

r - 来自 rstudio 的奇怪 ld 警告

r - 在 R 中实现禁忌搜索

r - 如何在 R 中对 2x2x2 设计进行纵向分析?

mysql - 从mysql的大表中快速选择随机行

javascript - 什么是好的 Javascript 时间选择器?

c++ - 较长的 getline cin 输入问题

r - 向水平箱线图添加点

angular - 无法在 Angular 多重选择中预选值

javascript - 如何仅在选择第一个下拉列表后启用第二个下拉列表?

javascript - 获取 2 个输入字段中的舍入值,这些值会在其中之一更新时更新