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)