Генерируйте переменное количество элементов div (строк и столбцов) в renderUi с помощью цикла for - PullRequest
0 голосов
/ 06 мая 2019

У меня есть 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...