如何在R中根据用户输入呈现不同数量的表?

如何在R中根据用户输入呈现不同数量的表?,r,shiny,R,Shiny,在R Shining应用程序中,我试图根据用户输入呈现不同数量的表。例如,我创建了以下应用程序: # ui.R fluidPage( numericInput("numeric.input", "Select Number of Tables:", 0, min = 0), tableOutput("table") ) # server.R data(iris) function(input, output) { output$table <- renderTable(

在R Shining应用程序中,我试图根据用户输入呈现不同数量的表。例如,我创建了以下应用程序:

# ui.R

fluidPage(
  numericInput("numeric.input", "Select Number of Tables:", 0, min = 0),
  tableOutput("table")
)

# server.R

data(iris)

function(input, output) {
  output$table <- renderTable({
    head(iris)
  })
}
#ui.R
流动摄影(
数值输入(“numeric.input”,“选择表格数量:”,0,min=0),
表格输出(“表格”)
)
#服务器.R
数据(iris)
功能(输入、输出){

output$table我已经通过使用解决了这个问题,但是。下面的代码工作正常:

# ui.R

fluidPage(
  numericInput("numeric.input", "Select Number of Tables:", 1, min = 1),
  uiOutput("tables")
)

# server.R

data(iris)

function(input, output) {

  # Rendering tables dependent on user input.
  observeEvent(input$numeric.input, {
    lapply(1:input$numeric.input, function(i) {
      output[[paste0('table', i)]] <- renderTable({
        head(iris)
      })
    })
  })

  # Rendering UI and outputtign tables dependent on user input.
  output$tables <- renderUI({
    lapply(1:input$numeric.input, function(i) {
      uiOutput(paste0('table', i))
    })
  })

}
#ui.R
流动摄影(
数值输入(“numeric.input”,“选择表格数量:”,1,min=1),
UIO输出(“表格”)
)
#服务器.R
数据(iris)
功能(输入、输出){
#呈现依赖于用户输入的表。
observeEvent(输入$numeric.input{
lappy(1:input$numeric.input,函数(i){

输出[[paste0('table',i)]]您的方法简单明了。根据@r2evans在评论中提供的链接,只需为此目的使用
insertUI
removeUI

ui <- fluidPage(
  numericInput("numericinput", "Select Number of Tables:", 0, min = 0),
  tags$div(id = 'tabledisplay')
)

server <- function(input, output) {
  inserted <- c()
  observeEvent(input$numericinput, {
    tablenum <- input$numericinput
    id <- paste0('table', tablenum)
    if (input$numericinput > length(inserted)) {
      insertUI(selector = '#tabledisplay',
               ui = tags$div(h4(
                 paste0("Table number ", input$numericinput)
               ), tags$p(renderTable({
                 head(iris)
               })),
               id = id))
      inserted <<- c(id, inserted)
    }
    else {
      inserted <- sort(inserted)
      removeUI(selector = paste0('#', inserted[length(inserted)]))          
      inserted <<- inserted[-length(inserted)]
    }
  })
}
shinyApp(ui, server)
ui