在Shiny

时间:2016-04-25 20:08:54

标签: r pdf shiny visualization text-mining

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我意识到这个问题比较老,但是我一直在寻找相同的答案,并构建了一个最小的应用程序来测试功能。当然,该问题已得到完全解决,但它可以正常工作,但是与往常一样,可重现的代码可以帮助我们所有人节省时间,所以我决定共享我的最小测试应用程序。

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)