从 SelectInput (R Shiny) 中的分组选项列表中获取组标签

Posted

技术标签:

【中文标题】从 SelectInput (R Shiny) 中的分组选项列表中获取组标签【英文标题】:Get the group label from a grouped list of choices in SelectInput (RShiny) 【发布时间】:2019-06-21 21:51:08 【问题描述】:

如何从selectInput 带有分组选项的下拉框中的选定输入中获取组名?比如Building中选择BankNature中选择Nature后如何得到Building

更新示例:

# demoing optgroup support in the `choices` arg
shinyApp(
  ui = fluidPage(
    selectInput("state", "Choose a word:",
      list(`Building` = list("Apartment", "Bank", "Hospital"),
           `Nature` = list("Bank", "River", "Orange"),
           `Color` = list("Blue", "Orange", "Red"))
    ),
    textOutput("result")
  ),
  server = function(input, output) 
    output$result <- renderText(
      paste("You chose", input$state)
    )
  
)

一种方法是存储所有选项及其分组标签的变量,然后搜索该选项来自哪个组。但是当组之间有重叠的选择时,这不起作用。

【问题讨论】:

您可以将列表保存在变量lst 中,然后通过names(which(sapply(lst, "%in%", x = input$state))) 获取列表名称 @BigDataScientist 感谢您的评论。是的,如果选择在组中是唯一的,则此方法有效。但是,如果不同组中有重叠的选择怎么办?有没有通用的方法来处理这种情况? 那么期望的输出是什么:两者,第一个,最后一个? @BigDataScientist 问题和示例已更新。希望这能回答您的问题。 【参考方案1】:

您可以给每个输入一个值而不是直接使用它们的名称,如下所示:

shinyApp(
  ui = fluidPage(
    selectInput("state", "Choose a word:",
                list(`Building` = list("Apartment"="ap", "Bank"="bk", "Hospital"="hp"),
                     `Nature` = list("Bank"="bk1", "River"="rv", "Orange"="or"),
                     `Color` = list("Blue"="bl", "Orange"="or1", "Red"="rd"))
    ),
    textOutput("result")
  ),
  server = function(input, output) 
    output$result <- renderText(
      paste("You chose", input$state)
    )
  
)

【讨论】:

我想我可以将组名和选项名连接起来作为每个选项的值,以使它们独一无二。谢谢。

以上是关于从 SelectInput (R Shiny) 中的分组选项列表中获取组标签的主要内容,如果未能解决你的问题,请参考以下文章

从 selectInput 到 facet_wrap 的多个变量:R Shiny

Shiny R:当 selectInput 值改变时重置其他输入值

r Shiny 使 textInput 以先前的 selectInput 为条件

R Shiny:将多个连续的反应传递给 selectInput

r 在Shiny中选择和多个selectInput

R Shiny、Leaflet 的问题 --> SelectInput 以更改下拉菜单中的选择