从数据框创建闪亮的仪表板侧边栏菜单

时间:2019-05-29 13:27:48

标签: r shinydashboard

我试图从表格自动在仪表板侧边栏下创建菜单项,但未成功。我正在使用下面的代码。

library(shiny)
library(shinydashboard)

header = dashboardHeader(title = "title")
sidebar = dashboardSidebar(sidebarMenuOutput("sidebarMenu"))
body = dashboardBody()

ui = dashboardPage(header, sidebar, body)


labels = data.frame(id = c(1,2,3),
                    name = c("lab1", "lab2", "lab3"))

server = function(input, output) { 

  output$sidebarMenu <- renderMenu({
    sidebarMenu(id="tabs",
                for (i in labels) {
                  menuItem(labels$name[i], tabName = labels$id[i])
                  })


  })
}


shinyApp(ui, server)

data.frame标签包含我需要在菜单中使用的标签和ID。我正在运行一个for循环。我该怎么办?

1 个答案:

答案 0 :(得分:1)

for (i in labels)

此循环不起作用,因为您将始终获取数据框,而不是数据框的一行。无论如何,我没有让它与循环配合使用,我通常使用lapply的组合将所有项目存储在列表中,并使用do.call通过renderUI函数对其进行可视化。

library(shiny)
library(shinydashboard)

labels = data.frame(id = c(1,2,3),
                    name = c("lab1", "lab2", "lab3"))

header = dashboardHeader(title = "title")
sidebar = dashboardSidebar(sidebarMenu(id="mytabs",
                                    uiOutput("sidebar_menu_UI")))
body = dashboardBody()

ui = dashboardPage(header, sidebar, body)


server = function(input, output) { 

    output$sidebar_menu_UI <- renderUI({

        myTabs = lapply(1:nrow(labels) , function(i) {

            menuItem(labels$name[i], tabName = labels$id[i])  
        })

        print(myTabs)

        do.call(sidebarMenu, myTabs)
    })
}


shinyApp(ui, server)