R / shiny中的selectInput框 - 具有相同标签的多个值的选择列表

时间:2014-06-06 15:34:21

标签: r shiny

我正在使用rShiny(shiny_0.9.1)R版本3.1.0(2014-04-10)和平台:x86_64-w64-mingw32 / x64(64位)开发Web应用程序。我在我的ui文件中使用selectInput方法从数据帧中选择两列(“IND1_WATER”,“IND2_WATER”)。 以下是工作示例代码:

  selectInput(inputId = "indicators",
                       multiple = TRUE,
                       label = "Select the list of indicators",
                       choices = list("Water stress" = "IND1_WATER",
                                      "Water scarcity" = "IND2_WATER")

但是我想标记两个具有相同名称的列,并使用它们来渲染图表。我尝试了不同的选项,如“水压力”= c(“IND1_WATER”,“IND2_WATER”)或“水压力”= colnames(mydf)[6:7],但它们不起作用。它只取第一个值。关于如何解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:2)

每个"选择"只能有一个与之关联的值。如果要为单个选择返回多个值,则必须通过连接所需的值来伪造它。例如

selectInput(inputId = "indicators",
    multiple = TRUE,
    label = "Select the list of indicators",
    choices = list("Water stress" = "IND1_WATER,IND2_WATER")

然后在服务器端

indicators <- strsplit(input$indicators, ",")[[1]]

如果有逗号,那将会有效。

答案 1 :(得分:2)

在CRAN(>= 0.10.1)上使用最新版本的闪亮,您可以使用新的optgroup功能(请参阅an example here)。在你的情况下,

selectInput(inputId = "indicators",
            multiple = TRUE,
            label = "Select the list of indicators",
            choices = list("Water stress" = c("IND1_WATER", "IND2_WATER")))

如果您尚未更新R套餐,请update.packages(ask = FALSE)

答案 2 :(得分:0)

这是我上一个问题的答案。为了让单个选择返回多个值,ui文件应该是这样的:

  selectInput(inputId = "indicator",
                label = (HTML("<b>Select a list of indicators:</b>")),
                multiple = TRUE,
                selected = 'Water stress',
               choices = list("Water stress" = "Water stress", "Water scarcity" = "Water scarcity" ))

虽然服务器文件应该包含一些条件语句,但是为了能够选择多个列,可以选择一个特定的值:

passData <- reactive({
    data <- data[data$Country %in% input$country_filter1 & 
                   data$Year %in% input$year,]
    rownames(data) = unique(data$NUTS_CODE)
    if (input$indicator== 'Water stress') {col= 7:9}
    if (input$indicator== 'Water scarcity') {col= 8:9}
    data[,col]
  }) 

我希望它可以帮助其他类似问题的人。感谢我的同事Javier Martinez的宝贵贡献!

答案 3 :(得分:0)

添加到这个问题

indicators <- strsplit(input$indicators, ",")[[1]]

与以下一起使用时会发出警告:“较长的对象长度不是较短对象长度的倍数”:

filter_at(., vars(col1, col2), any_vars(. == indicators))

您必须使用:

filter_at(., vars(col1, col2), any_vars(. %in% indicators))