在Shiny中上传许多文件

问题描述 投票:4回答:2

我正在开发一个可按主题/主题组织和可视化许多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,但是如何读取所有上传的文件?

r pdf shiny visualization text-mining
2个回答
3
投票

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

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

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


1
投票

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

可复制的应用程序:

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)
© www.soinside.com 2019 - 2024. All rights reserved.