Как создать динамический рендеринг Shiny R с таблицей, определяемой количеством загруженных файлов CSV?
Я создаю веб-приложение, которое после загрузки CSV-файлов преобразует данные и затем должно иметь возможность выводить несколько таблиц. Количество таблиц зависит строго от информации, содержащейся в CSV-файлах, поэтому рассчитывается в процессе преобразования данных. Я создал списокlst
с кадрами данных, которые должны быть выведены. Длина списка - это количество таблиц, которые должны быть созданы. После поиска в сети я столкнулся с очень похожим вопросом (Вот), на который, к сожалению, пока нет ответа. У кого-нибудь есть идеи как это решить?
Часть моего кода (не все, из-за значительного преобразования данных), где я хотел бы заменить фиксированныйmax_table
с переменнойlength(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)
Любая помощь приветствуется!