能否在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
相关产品推荐
相关产品推荐

