使用for循环在renderUi中生成可变数量的div(行和列)

时间:2019-05-06 15:28:46

标签: r for-loop shiny

我有一个data.frame ddi,其中行和列的数量可变,应以表格结构显示。我将splitLayout用于此目的(而不是tableOutput),因为它为我提供了更大的灵活性,可以进行个性化处理和单元格格式化。我发现结合使用lapplydo.call的解决方案(由于stackoverflow)。我的问题是,是否可以使用for循环而不是lapply来实现,这将使我在处理单个单元格方面更具灵活性。以下代码显示了一个简化的工作示例。在这种简单的情况下,lapply可以很好地工作,但是在更复杂的情况下,for循环可能会更好。

library(shiny)
ui <- fluidPage(
  uiOutput("page_SPi")
)

server <- shinyServer(func = function(input, output, session) {
  ddi <- data.frame(na = c("attr1", "attr2", "attr3", "attr4", "attr5"),
    alt1 = sample(10:99,5),
    alt2 = sample(10:99,5),
    alt3 = sample(10:99,5)
    )
  cXa <- c("37%","12%","12%","12%","12%", "12%")
  rView = 1:5
  cView = 1:4
  output$page_SPi <- renderUI(
    lapply(rView, function(ri) {
      do.call(
        what = splitLayout,
        args = c(
          lapply(cView, function(cj) {
            if (cj == 1) {div(id = "cs_l", HTML(ddi$na[ri]))}
            else {div(id = "cs_v", HTML(ddi[ri,cj]))}
          }),
          list(cellWidths = cXa, id = "cs2_r1")
        )
      )
    })
  )

})
shinyApp(ui, server)

0 个答案:

没有答案