首页 > 解决方案 > 如何使用 shinydashboardPlus 的轮播实现动态数量的幻灯片?

问题描述

我希望使用 shinydashboardPlus 的轮播来显示许多图表。这些图表的数量每天可以从 1 到 10 不等。

cron 作业每天运行 R 脚本。

这是一个具有固定数量幻灯片的工作示例,三张。

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)

chart_names <- c( "http://placehold.it/900x500/39CCCC/ffffff&text=Slide+1", 
                  "http://placehold.it/900x500/39CCCC/ffffff&text=Slide+2",
                  "http://placehold.it/900x500/39CCCC/ffffff&text=Slide+3")


ui <- dashboardPagePlus(

  header = dashboardHeaderPlus(disable = TRUE ),
  sidebar = dashboardSidebar(width = 0 ),

 
  body = dashboardBody(
    carousel(indicators = TRUE,
             id = "mycarousel",
             carouselItem(
               tags$img(src = chart_names[1])
             ),
             carouselItem(
               tags$img(src = chart_names[2])
             ),
             carouselItem(
               tags$img(src = chart_names[3])
             )
    )
  )
)

server <- function(input, output, session) {}

shinyApp(ui, server)

这是do.call可以在哪里使用的示例吗?

从名称或函数以及要传递给它的参数列表构造并执行函数调用。

这次尝试:

do.call(carousel, as.list(c(id = "mycarousel", "carouselItem(tag$img(src = chart_names[1])")))

导致此错误:

Error: $ operator is invalid for atomic vectors

如何以编程方式将以前未知数量的幻灯片添加到 shinydashboardPlus 轮播?

标签: rshinyshinydashboarddo.call

解决方案


答案在带有 .list 参数 ?carousel 的文档中

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)

nb_items = 5

items = Map(function(i) {carouselItem(
  tags$img(src = paste0("http://placehold.it/900x500/39CCCC/ffffff&text=Slide+", i))
)}, 1:5)


ui <- dashboardPagePlus(
  
  header = dashboardHeaderPlus(disable = TRUE ),
  sidebar = dashboardSidebar(width = 0 ),
  
  
  body = dashboardBody(
    carousel(indicators = TRUE,
             id = "mycarousel",
             .list = items
    )
    
  )
)

server <- function(input, output, session) {}

shinyApp(ui, server)


推荐阅读