R Shiny仪表板不会渲染多个图

时间:2017-10-25 12:51:59

标签: r shiny shinydashboard

我绘制了高级图表对象并将它们存储在列表中。当我尝试在闪亮的仪表板中绘制它们时,它适用于一页。但是,如果我将其设置为动态,即依赖于输入列表的菜单和选项卡的数量不同,则它不显示任何内容,只显示一页图表,其他选项卡和菜单为空白。这是一个例子:

require(shiny)
require(shinydashboard)
require(highcharter)

temp <-     lapply(list(sin((1:100)/10),tan((1:100)/10),runif(1e3),seq(100)/20),function(x)
  highchart() %>% hc_add_series(runif(length(x))+x))

plot_list <- list(`Menu 1` = list(`Tab 1` = temp,
                                  `Tab 2` = lapply(2:3,function(i)     temp[[i]])),
                  `Menu 2` = list(`Tab 1` = lapply(1:2,function(i)     temp[[i]])))

layout_column <- c(1,2) # columns per page

ui <- dashboardPage(
  dashboardHeader(title = "My Page"),
  dashboardSidebar(sidebarMenuOutput("sideBar_menu_UI")),
  dashboardBody(uiOutput("test_UI"))
)

server <- shinyServer(function(input, output, session){
  ## create content for each page and tab
  for(n in seq(plot_list)) ## menus
    for(m in seq(plot_list[[n]])) ## tabs
      lapply(seq(plot_list[[n]][[m]]), function(i) {
        output[[paste0(LETTERS[n],letters[m], i)]] <-     renderHighchart(plot_list[[n]][[m]][[i]])})

  ## create menu items
  output$sideBar_menu_UI <- renderMenu(
    sidebarMenu(id = "sideBar_Menu",
                lapply(seq(plot_list),function(x)
                  menuItem(names(plot_list)[x], tabName=paste0("menu",x),     icon = icon("calendar")))
    ))

  ## assign content to page of each menuItem
  output$test_UI <- renderUI(
    do.call(tabItems,lapply(seq(plot_list),function(x) 
      tabItem(tabName=paste0("menu",x),uiOutput(paste0("menu",x,"_UI")))))
  )

  for(n in seq(plot_list)) ## menus
    for(m in seq(plot_list[[n]])) ## later change its location inside     switch?s
      output[[paste0("menu",n,"_UI")]] <- renderUI({
        temp <- do.call(tabBox,     lapply(names(plot_list[[n]]),function(tabname){
          tabPanel(title = tabname,
                   fluidPage(
                     lapply(seq(plot_list[[n]][[m]]),function(i)
                       box(highchartOutput(paste0(LETTERS[n],letters[m],     i)), ## get output plots
                           title = paste("Plot", i),
                           status = "primary", # primary, success, info,     warning, danger
                           solidHeader = TRUE,collapsible = TRUE,width =     12/layout_column[n])
                     )))
        }))
        temp$attribs <- "col-sm-12" ## set width to page width
        temp # check later the fluid page location
      })
})

runApp(list(ui= ui, server = server))

我真正想要的是为应用程序提供一些高清图,它应该放置并在菜单和标签中呈现它们。 任何人都有这方面的线索?

0 个答案:

没有答案