2

我尝试在数据帧上动态创建手风琴韧皮。尽管进行了许多尝试,但我并没有设法让它发挥作用。在带有两个示例的示例仪表板的代码下方:

  1. lappy:不工作(lijst1)
  2. 对每个项目进行编程:工作(lijst2)

请参见下面的示例。

希望有人可以提供帮助?

library(bs4Dash)
library(shiny)

dataset <- data.frame(
  title = c("title 1", "title 2")
  , tekst = c("text 1", "text 2")
)

# create using lapply (flexible)
lijst1 <- accordion(
  id = "test1"
  , lapply(seq_along(dataset$title), function(i){
    accordionItem(title = dataset$title[i], dataset$tekst[i])
  })
)

# create by specify each item
lijst2 <- accordion(
  id = "test2"
  , accordionItem(title = "title 1 simple", "text 1 simple")
  , accordionItem(title = "title 1 simple", "text 2 simple")
)


ui <- dashboardPage(
  dashboardHeader()
  , dashboardSidebar()
  , dashboardBody(
    h2("Doesn't work")
    , lijst1
    , h2("Works")
    , lijst2
  )
)

server = function(input, output) {}

shinyApp(ui = ui, server = server)
4

1 回答 1

2

实现所需结果的一种选择是使用do.callwhich 效果很好,lapply因为它允许您将函数参数作为 a 传递list

library(bs4Dash)
library(shiny)

dataset <- data.frame(
  title = c("title 1", "title 2"),
  tekst = c("text 1", "text 2")
)

# create using lapply (flexible)
lijst1 <- do.call("accordion", c(
  list(id = "test1"),
  lapply(seq_along(dataset$title), function(i) accordionItem(title = dataset$title[i], dataset$tekst[i]))
))

# create by specify each item
lijst2 <- accordion(
  id = "test2",
  accordionItem(title = "title 1 simple", "text 1 simple"),
  accordionItem(title = "title 1 simple", "text 2 simple")
)


ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    h2("Doesn't work"),
    lijst1,
    h2("Works"),
    lijst2
  )
)

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

}

shinyApp(ui, server)

在此处输入图像描述

于 2022-02-07T17:23:29.497 回答