Wie erstelle ich Shiny R dynamic renderTable mit einer Anzahl von Tabellen, die von den hochgeladenen CSV-Dateien bestimmt werden?

Ich erstelle eine Web-App, die nach dem Hochladen von CSV-Dateien die Daten transformiert und dann in der Lage sein sollte, einige Tabellen auszugeben. Die Anzahl der Tabellen hängt streng von den in den CSV-Dateien enthaltenen Informationen ab und wird daher während des Datentransformationsprozesses berechnet. Ich habe eine Liste erstelltlst mit Datenrahmen, die ausgegeben werden müssen. Die Länge der Liste entspricht der Anzahl der Tabellen, die erstellt werden sollen. Nach der Suche im Internet bin ich auf eine sehr ähnliche Frage gestoßen Hie), was leider noch nicht beantwortet wurde. Hat jemand eine Idee, wie man es löst?

Ein Teil meines Codes (wegen erheblicher Datenumwandlung nicht alle), den ich durch ein festes @ ersetzen möchmax_table mit Variablelength(data_set()):

library(shiny)

ui <- fluidPage(
  fluidRow(column(3,
                  wellPanel(
                    fileInput(inputId = "files",
                              label = "Choose cvs files",
                              accept=c('text/csv', 
                                       'text/comma-separated-values,text/plain', 
                                       '.csv'),
                              multiple = TRUE))),
           column(5, offset = 1, 
                  uiOutput("tables")
                  )
           )
  )

max_table <- 5
server <- function(input,output){


  data_set <- reactive({
    if(is.null(input$files)){
      return(NULL)
    }

    lst <- list()
    for(i in 1:length(input$files[,1])){
      lst[[i]] <- read.csv(input$files[[i, 'datapath']], sep = ",", header = TRUE, skip = 4, dec = ".")
    }
    lst
  })

  output$tables <- renderUI({
    plot_output_list <- lapply(1:max_table, function(i) {
      tablename <- paste("tablename", i, sep="")
      tableOutput(tablename)
    })
    do.call(tagList, plot_output_list)
  })


  for (i in 1:max_table){
    local({
      my_i <- i
      tablename <- paste("tablename", my_i, sep="")
      output[[tablename]] <- renderTable({data_set()[[my_i]] 
      })
    })    
  }
}

shinyApp(ui = ui, server = server)

Jede Hilfe wäre sehr dankbar!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage