我正在开发一个可按主题/主题组织和可视化许多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文件进行相同的操作。
我知道这个问题比较老,但是我一直在寻找相同的答案,并构建了一个最小的应用程序来测试功能。该问题已由其他答案完全涵盖,但由于一如既往,可重现的代码可帮助我们所有人节省时间,因此我决定共享我的最小测试应用程序。
可复制的应用程序:
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)