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

能否在sidebarLayout中添加menuItems整理输入组件?

问题解答

原代码无法实现你想要的将输入组件归类到3个可折叠菜单下的效果,因为当前代码只是将所有输入组件直接平铺在sidebarPanel中,没有分组折叠的结构。

要实现你需要的分类折叠效果,可以借助shinyWidgets包的accordion组件,将不同类型的输入组件分别放入独立的折叠面板中。修改后的代码如下:

library(shiny)
library(shinyWidgets)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      # 第一个折叠菜单:Picker输入组
      accordion(
        id = "input_groups",
        accordionItem(
          title = "Picker输入组",
          pickerInput("A", "A", choices = LETTERS[1:5]),
          pickerInput("B", "B", choices = LETTERS[1:5]),
          pickerInput("C", "C", choices = LETTERS[1:5]),
          pickerInput("D", "D", choices = LETTERS[1:5]),
          pickerInput("E", "E", choices = LETTERS[1:5]),
          pickerInput("F", "F", choices = LETTERS[1:5])
        ),
        # 第二个折叠菜单:文本输入组
        accordionItem(
          title = "文本输入组",
          textInput("G", "G"),
          textInput("H", "H"),
          textInput("I", "I"),
          textInput("J", "J"),
          textInput("K", "K")
        ),
        # 第三个折叠菜单:数值输入组
        accordionItem(
          title = "数值输入组",
          numericInput("L", "L", 1),
          numericInput("M", "M", 1),
          numericInput("N", "N", 2),
          numericInput("O", "O", 3),
          numericInput("P", "P", 4),
          numericInput("Q", "Q", 4)
        )
      )
    ),
    mainPanel()
  )
)

server <- function(input, output, session) {
  
}

shinyApp(ui, server)

如果更倾向于层级清晰的侧边栏菜单样式,也可以改用shinydashboard包的结构实现:

library(shiny)
library(shinydashboard)
library(shinyWidgets)

ui <- dashboardPage(
  dashboardHeader(title = "分类输入面板"),
  dashboardSidebar(
    sidebarMenu(
      menuItem("Picker输入组", tabName = "picker_tab", icon = icon("list"),
               menuSubItem("A", tabName = "a"),
               menuSubItem("B", tabName = "b"),
               menuSubItem("C", tabName = "c"),
               menuSubItem("D", tabName = "d"),
               menuSubItem("E", tabName = "e"),
               menuSubItem("F", tabName = "f")
      ),
      menuItem("文本输入组", tabName = "text_tab", icon = icon("font"),
               menuSubItem("G", tabName = "g"),
               menuSubItem("H", tabName = "h"),
               menuSubItem("I", tabName = "i"),
               menuSubItem("J", tabName = "j"),
               menuSubItem("K", tabName = "k")
      ),
      menuItem("数值输入组", tabName = "numeric_tab", icon = icon("calculator"),
               menuSubItem("L", tabName = "l"),
               menuSubItem("M", tabName = "m"),
               menuSubItem("N", tabName = "n"),
               menuSubItem("O", tabName = "o"),
               menuSubItem("P", tabName = "p"),
               menuSubItem("Q", tabName = "q")
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(tabName = "a", pickerInput("A", "A", choices = LETTERS[1:5])),
      tabItem(tabName = "b", pickerInput("B", "B", choices = LETTERS[1:5])),
      tabItem(tabName = "c", pickerInput("C", "C", choices = LETTERS[1:5])),
      tabItem(tabName = "d", pickerInput("D", "D", choices = LETTERS[1:5])),
      tabItem(tabName = "e", pickerInput("E", "E", choices = LETTERS[1:5])),
      tabItem(tabName = "f", pickerInput("F", "F", choices = LETTERS[1:5])),
      
      tabItem(tabName = "g", textInput("G", "G")),
      tabItem(tabName = "h", textInput("H", "H")),
      tabItem(tabName = "i", textInput("I", "I")),
      tabItem(tabName = "j", textInput("J", "J")),
      tabItem(tabName = "k", textInput("K", "K")),
      
      tabItem(tabName = "l", numericInput("L", "L", 1)),
      tabItem(tabName = "m", numericInput("M", "M", 1)),
      tabItem(tabName = "n", numericInput("N", "N", 2)),
      tabItem(tabName = "o", numericInput("O", "O", 3)),
      tabItem(tabName = "p", numericInput("P", "P", 4)),
      tabItem(tabName = "q", numericInput("Q", "Q", 4))
    )
  )
)

server <- function(input, output, session) {
  
}

shinyApp(ui, server)

第一种方案基于你原有的sidebarLayout结构,用折叠面板实现分组,更贴合初始代码框架;第二种是完整的仪表盘样式,菜单层级更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:07:29