我有一个data.frame ddi
,其中行和列的数量可变,应以表格结构显示。我将splitLayout
用于此目的(而不是tableOutput
),因为它为我提供了更大的灵活性,可以进行个性化处理和单元格格式化。我发现结合使用lapply
和do.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)