Rshiny: генерация динамического HTML с использованием циклов - PullRequest
0 голосов
/ 30 мая 2019

Мне интересно создать список элементов div, каждый из которых имеет динамические значения в Rshiny, как показано ниже.

<div>1</div>
<div>2</div>
<div>3</div>
.
.
.
<div>9</div>

Я сделал это (на сервере), просматривая список и вектор каждого элемента списка. Я отрисовываю пользовательский интерфейс output$x1, output$x2, output$x3, etc. Точно так же я делаю цикл, чтобы создать 9 элементов пользовательского интерфейса в функции пользовательского интерфейса. Код как ниже:

# Define UI for app that draws a histogram ----
ui <- fluidPage(
  fluidRow(
    lapply(1:9, function(i) {
      uiOutput(paste0('x', i))
    })

  )



)

# Define server logic required to draw a histogram ----
server <- function(input, output) {

  obj<- list(

    col1=1:3,
    col2=4:5,
    col3=5:9

  )

  for(elem in obj){
    for(num in elem){
      print(paste0(num))
      output[[paste0(x,num)]]<-renderUI({
        tags$div(
          tags$p(
            num
          )
        )
      })
    }
  }

}

inyApp (пользовательский интерфейс, сервер) У меня две проблемы с моим кодом:

1) В моем интерфейсе по какой-то неизвестной мне причине ничего нет.

2) Я верю, что когда пользовательский интерфейс будет распечатан, он напечатает только окончательное значение div. Например, output$x1 = 9, output$x2= 9, etc

1 Ответ

0 голосов
/ 31 мая 2019
  • Используйте tagList в пользовательском интерфейсе с do.call

  • paste("x", а не paste(x

  • используйте local для определения выходных данных в цикле, иначе вы получите только последний


ui <- fluidPage(
  fluidRow(
    do.call(tagList, lapply(1:9, function(i) {
      uiOutput(paste0('x', i))
    }))
  )
)

server <- function(input, output) {

  obj <- list(
    col1=1:3,
    col2=4:5,
    col3=5:9
  )

  for(elem in obj){
    for(num in elem){
      local({
        mynum <- num
        output[[paste0("x",mynum)]] <- renderUI({
          tags$div(
            tags$p(
              mynum
            )
          )
        })
      })
    }
  }

}
shinyApp(ui, server) 
...