【问题标题】:Is there a way in which we can make the sidebarMenu -> menuItems dynamic?有没有一种方法可以让侧边栏菜单 -> 菜单项动态化?
【发布时间】:2018-12-08 19:33:53
【问题描述】:

我正在制作一个 ShinyDashboard 程序,但在寻找在 MenuItems 中创建循环的方法时遇到了一些麻烦。具体来说,我正在寻找可以替换以下行的内容:

menuItem(
  "Section1",
  tabName = "Section1",
  startExpanded = T,
  menuSubItem("Sub Menu 1", tabName = "tab1"),
  menuSubItem("Sub Menu 2", tabName = "tab2")
  ),

menuItem(
  "Section2",
  tabName = "Section2",
  startExpanded = T,
  menuSubItem("Sub Menu 1", tabName = "tab1"),
  menuSubItem("Sub Menu 2", tabName = "tab2")
  )

这是我尝试过的:

lapply(1:2, function(i){
       do.call(menuItem, c(text = paste0("Section",i), tabName =paste0("Section",i), startExpanded = T,
       lapply(1:2, function(j) {
           menuSubItem(text = paste0("sub menu ", j), tabName=paste0("tab",j))
       }
       )))
  })

它抛出以下错误:

错误:$ 运算符对原子向量无效

我浏览了一篇与 dashboardBody -> tabItems 类似的帖子

How to make a function in a for loop or lapply loop in a tabItem dashboard shiny

提前感谢您的帮助。

【问题讨论】:

    标签: r shiny shinydashboard


    【解决方案1】:

    我不完全确定这是否是您要查找的内容,但下面的代码会动态创建这两个菜单项及其子项。

    library(shiny)
    library(shinydashboard)
    
    
    ui <- dashboardPage(
      dashboardHeader(title = "My Page"),
      dashboardSidebar(sidebarMenuOutput("sidebar_menu")),
      dashboardBody(
        NULL
      ) 
    )
    
    server <- shinyServer(function(input, output, session) { 
      output$sidebar_menu <- renderMenu({
        sidebarMenu(id = "tab",
    
                    menuItem("Section1", tabName="Section2", startExpanded = T,
                             lapply(1:2, function(i) {
                               menuSubItem(paste0("Sub Menu ",i), tabName = paste0("tab",i))
                             })
                    ),
                    menuItem("Section2", tabName="Section2", startExpanded = T,
                             lapply(1:2, function(i) {
                               menuSubItem(paste0("Sub Menu ",i), tabName = paste0("tab",i))
                             })
                    )
        )
    
    
      })
    
    })
    runApp(list(ui= ui, server = server))
    

    【讨论】:

    • 嗨亚当,感谢您的回复....此代码动态生成子项而不是菜单项,因为它正在修复第 1 节和第 2 节。我正在寻找可以动态创建这些部分的东西。如果我的理解有误,请告诉我。
    【解决方案2】:

    找到解决办法

    output$menu <- renderMenu(
        {
          sidebarMenu(id = "sbm",
                      lapply(1:10, function(i){
                        do.call(menuItem, c(text = paste0("Section",i), tabName = paste0("Section",i), startExpanded = T,
                                            lapply(1:2, function(j) {
                                              menuSubItem(text = paste0("sub menu ", j), tabName=paste0("tab",j))
                                            }
                                            )))
                      }
                        ))
          })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多