You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny中仅为部分选项组定义名称?

解决Shiny下拉菜单部分分组隐藏组名的问题

要实现部分分组不显示组名的需求,有两种可行方案:

方案一:修改selectInput生成的标签

利用htmltools的tagQuery定位目标分组,将其组名设为空字符串即可隐藏:

library(shiny)
library(htmltools)

grouped_options <- list(
  "Named category 1" = list("list_choice1"),
  # 标记为需要隐藏组名的分组
  "NONAME" = list("Use all data", "list_choice3"),
  "Named category 2" = list("list_choice5", "list_choice6")
)

# 生成原始下拉菜单
dropdown_element <- selectInput(
  inputId = "dd1",
  label = "Dropdown menu with categorised options",
  choices = grouped_options
)

# 定位并修改目标optgroup
dropdown_element <- tagQuery(dropdown_element) %>%
  find("optgroup[label='NONAME']") %>%
  attr("label", "") %>%
  allTags()

ui <- fluidPage(
  h1("Demo dropdown with categories"),
  dropdown_element,
  textOutput("sel_choice")
)

server <- function(input, output, session) {
  output$sel_choice <- renderText(input$dd1)
}

shinyApp(ui, server)

原理:selectInput会为每个列表项生成带label属性的optgroup标签,通过tagQuery找到标记为NONAME的分组,将其label设为空,浏览器就不会显示该组的名称,同时保留分组的缩进样式。

方案二:手动构建HTML下拉菜单

如果需要更精准的控制,直接用Shiny的HTML标签手动构建下拉菜单,完全自定义每个分组的显示:

library(shiny)

ui <- fluidPage(
  h1("Demo dropdown with categories"),
  # 对应selectInput的label
  tags$label("Dropdown menu with categorised options", `for` = "dd1"),
  tags$select(
    id = "dd1",
    # 无名称的分组,label设为空
    tags$optgroup(
      label = "",
      tags$option("Use all data", value = "Use all data"),
      tags$option("list_choice3", value = "list_choice3")
    ),
    # 正常显示的分组1
    tags$optgroup(
      label = "Named category 1",
      tags$option("list_choice1", value = "list_choice1")
    ),
    # 正常显示的分组2
    tags$optgroup(
      label = "Named category 2",
      tags$option("list_choice5", value = "list_choice5"),
      tags$option("list_choice6", value = "list_choice6")
    )
  ),
  textOutput("sel_choice")
)

server <- function(input, output, session) {
  output$sel_choice <- renderText(input$dd1)
}

shinyApp(ui, server)

这种方式不需要依赖selectInput的自动生成逻辑,完全由你控制每个分组的结构和样式,适合复杂的自定义场景。

内容的提问来源于stack exchange,提问作者mkranj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:31:37