R shiny:如何构建输入元素列表,然后 return 它们作为单个元素在 UI 中呈现?

R shiny: how to build a list of input elements and then return them as a single element for rendering in the UI?

我想生成一组 R 闪亮滑块输入,例如:

label1:
<-------------slider1------------->
label2:
<-------------slider2------------->

对于一些可变数量的输入。但是,我需要 return 所有生成的元素作为单个元素或组件用于更高级别的 UI 函数,所以我正在考虑将整个东西包装在 div()。我被困在这一点上:

lapply(
    listOfSliderLabels, function(sliderLabel){
    #build a new slider: sliderInput(...)
    #how do I add this new slider to something like a div, and return the div?
})

do.call 非常适合以编程方式构建输入。这是一个将它与 lapply 一起使用以从 args 列表构建滑块输入的示例:

sliderInputData <- list(
  list(inputId = "slider1", label = "slider1", min = 1, max = 5, value = 3),
  list(inputId = "slider2", label = "slider2", min = 2, max = 5, value = 4),
  list(inputId = "slider3", label = "slider3", min = 3, max = 5, value = 5)
)

buildSliderInputs <- function(inputData) {
  inputs <- lapply(inputData, function(args) {
    do.call(sliderInput, args)
  })

  do.call(div, inputs)
}

ui <- fluidPage(
  buildSliderInputs(sliderInputData)
)

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

shinyApp(ui, server)