【问题标题】:Can you add shinydashboardplus accordion items using lapply or a loop?您可以使用 lapply 或循环添加 shinydashboardplus 手风琴项目吗?
【发布时间】:2021-12-28 19:26:15
【问题描述】:

我正在尝试使用 shinydashboardplus 手风琴功能在闪亮的应用程序中创建手风琴,因为它非常重复并且手风琴的所有信息都来自数据,理想情况下我想使用 lapply 功能或 for 循环.我不确定这是否可能。到目前为止,这是我的代码。

library("shiny")
library(shinydashboardPlus)

data(iris)

# UI ----
ui <- fluidPage(
  
  # App title ----
  titlePanel("Hello Shiny!"),
  
  # Sidebar layout  ----
  sidebarLayout(
    
    # Sidebar panel ----
    sidebarPanel(
      
      p("Some text")
      
    ),
    
    # Main panel ----
    mainPanel(
      
      # Output: accordion ----
      accordion(
        
        id = "id-accordion",
        
            #for (i in 1:3){
            #  accordionItem( #G11
            #    title = unique(ocup$nom2d[i]),
            #    tableOutput(paste0("table",i))
            #  )
            #  
            #}
        
            accordionItem( #G11
              title = unique(iris$Species)[1],
              tableOutput("table1")
            ), #G11 fin
            accordionItem( #G12
              title = unique(iris$Species)[2],
              tableOutput("table2")
            ), #G12
            accordionItem( #G13
              title = unique(iris$Species)[3],
              tableOutput("table3")
            )  #G13
        
        
      ) 
      
    )
  )
)


server <- function(input, output) {
 
  lapply(1:3, function(i){
    outputId <- paste0("table", i)
    output[[outputId]] <- renderTable({iris %>% filter(Species == unique(iris$Species)[i]) %>% select(Sepal.Length, Sepal.Width)})
  })
  
}


shinyApp(ui, server)

我也考虑过使用 reactable 代替手风琴,但我不能让它看起来很好(见问题 Custom JS aggregation function reactable groups pull data from table

提前感谢您的所有帮助。

【问题讨论】:

  • 即使使用 DT,您的代码也能正常工作。有什么问题?
  • 对不起,我的意思是我想在 UI 部分也使用 lapply 或循环,而不仅仅是在服务器部分。

标签: loops shiny accordion lapply shinydashboardplus


【解决方案1】:

您可以使用do.calllapply 的组合以编程方式创建accordionItem

library(shiny)
library(shinydashboardPlus)

data(iris)

ui <- fluidPage(
  titlePanel("Hello Shiny!"),
  sidebarLayout(
    sidebarPanel(
      p("Some text")
    ),
    mainPanel(
      do.call(accordion, c(list(id = "id-accordion"), lapply(seq_along(unique(iris$Species)), function(i){
        accordionItem(
          title = unique(iris$Species)[i],
          tableOutput(paste0("table", i))
        )
      })))
    )
  )
)

server <- function(input, output) {
  lapply(1:3, function(i){
    outputId <- paste0("table", i)
    output[[outputId]] <- renderTable({iris %>% filter(Species == unique(iris$Species)[i]) %>% select(Sepal.Length, Sepal.Width)})
  })
}

shinyApp(ui, server)

【讨论】:

  • 谢谢!现在我只需要弄清楚如何做到这一点,这样我就可以将手风琴嵌套在另一个里面......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多