У меня есть 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)