3

我想使用一个有序/无序列表,如下所示:

tags$ul(
    tags$li("Item 1"),
    tags$li("Item 2"),
    tags$li("Item 3"),
    tags$li("Item 4")
)

但是,我希望列表中的项目数量取决于其他因素;也就是说,不是固定大小的。这可能吗?

例如,如果我的字符向量最终大小为 3,那么我想将其中的三个元素显示为三个单独的行。如果向量的大小为 10,那么它应该是一个有 10 个级别的有序/无序列表。

所以在这里要求两件事:

  1. 根据某些变量制作不同大小的有序/无序列表
  2. 在每个级别中显示某些文本,这些文本也会根据显示的行而有所不同
4

1 回答 1

5

Shiny 足够聪明,如果您将 HTML 标记列表传递给 a uiOutput,它会将每个标记放在自动生成的 HTML 代码中的单独行上。因此,您可以使用apply来制作tags$li对象列表,然后将它们传递给 auiOutput以在页面上显示它们:

library(shiny)

ui <- fluidPage(
    tags$ul(
        uiOutput('list')
    )

)

server <- function(input, output, session) {
  df <- data.frame(item = c('item 1', 'item 2', 'item 3'), num = c(2,3,4))

  output$list <- renderUI({
        apply(df, 1, function(x) tags$li(x['item'], "The SCORE IS: ", x['num']))
  })
}

shinyApp(ui, server)

您可以随意扩展它。只要返回的函数apply返回一个tags$li对象,你就可以让它变得像你想要的那样复杂。

于 2018-05-18T14:55:48.523 回答