Как загрузить несколько таблиц и отобразить их отдельно в r блестящий? - PullRequest
2 голосов
/ 02 мая 2020

Я хочу загрузить несколько таблиц и отображать их отдельно.

Например: я хочу загрузить N таблиц (я не знаю N заранее) и хочу отобразить их на главной панели как:

Table1:

Table2:

Table3:

.....

Мой код отображается ниже, но это не сработало. Как это изменить?

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput(
        inputId = "calfile", 
        label = "Choose CSV File", 
        multiple = TRUE,
        accept = c("text/csv",
                   "text/comma-separated-values,text/plain",
                   ".csv")
      )
    ),
    mainPanel(
      tableOutput("contents")
    )
  )
)

server <- function(input, output) {

  data<-reactive({

    if (is.null(input$calfile))
      return()
    else
    {
      nfile<-nrow(input$calfile)

      csv=list()

      for(i in 1: nfile)
      {
        csv[[i]]=read.csv(input$calfile$datapath[i])

      }

      }

  })


  output$contents<-  renderTable(data())
}

shinyApp(ui, server)

Большое спасибо.

1 Ответ

1 голос
/ 03 мая 2020

Вот пример, который может быть полезен:

{ ссылка }

Редактировать : попробуйте это для своего сервера для создания N таблиц , Вы можете прочитать в своих N файлах данных список и динамически создать выходные данные для N таблиц в выражении observe.

server <- function(input, output) {

  observe({
    if (!is.null(input$calfile)) {
      N_tables = length(input$calfile[, 1])

      upload <- list()
      for (i in 1:N_tables) {
        upload[[i]] <- read.csv(input$calfile$datapath[i])
      }

      output$contents <- renderUI({
        table_output_list <- lapply(1:N_tables, function(i) {
          tableOutput(paste0("table_name", i))
        })
        do.call(tagList, table_output_list)
      })

      for (i in 1:N_tables) {
        local({
          my_i <- i
          output[[paste0("table_name", my_i)]] <- renderTable({
            upload[[my_i]]
          })
        })
      }
    }
  })

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...