在 Shiny 中上传许多文件

Uploading many files in Shiny

我正在开发一个应用程序,通过 topic/theme 帮助组织和可视化许多 PDF 文档。我可以上传和阅读单个 PDF,但我很难阅读多个 PDF 文档。

对于单个 PDF 文档:

ui.R

  ---
  fileInput('file1', 'Choose PDF File', accept=c('.pdf'))

 ---

server.R

   --------

   library(pdftools)

   -------


 mypdf<-reactive({

   inFile <- input$file1

   if (is.null(inFile)){
  return(NULL)
  }else{
  pdf_text(inFile$datapath)

   }

  })

要上传多个 PDF 文件,我必须在代码的 ui.R 部分使用 multiple = TRUE,但如何读取所有上传的文件?

上传的文件可以像这样在for循环中读取

for(i in 1:length(input$files[,1])){
  lst[[i]] <- read.csv(input$files[[i, 'datapath']])
}

这是 CSV 文件的示例,但您也可以对 pdf 文件执行相同的操作。

我知道这个问题比较老,但我一直在寻找相同的答案并构建了一个最小的应用程序来测试功能。其他答案完全涵盖了这个问题,但一如既往可重现代码帮助我们所有人节省时间,所以我决定分享我的最小测试应用程序。

可复制的应用程序:

# creating sample files to upload
write.csv2(
  x = "diff same", 
  file = "test.csv"
)

write.csv2(
  x = "diffhere same", 
  file = "test2.csv"
)


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

server <- function(input, output) {
  output$contents <- renderTable({
    req(input$files)
    upload = list()

    for(nr in 1:length(input$files[, 1])){
      upload[[nr]] <- read.csv(
        file = input$files[[nr, 'datapath']]
      )
    }

    return(upload)
  })
}

shinyApp(ui, server)