
[英]Is there a way to upload multiple .zip files within an [R] Shiny application and select a specific file type to extract?
[英]Uploading zip with multiple files into a shiny application
我试图通过我的闪亮应用程序上传一个zip文件,其中包含一堆xml文件,然后对其进行处理。 我的代码如下所示:
library(shiny)
parse_xml <-function(FileName) {
a <- xmlParse(FileName)
xmlToDataFrame(a, stringsAsFactors = FALSE) %>%
fill(Description, Min, Max, id, StartDateTime,
EndDateTime, .direction = "up") %>%
na.omit()
}
ui <- fluidPage(
column(width = 4,
fileInput("upload", "Upload", accept = ".zip")),
column(width = 4,
br(),
actionButton("process", "Process uploaded data"))
)
server <- function(input, output) {
observeEvent(input$process, {
files <- unzip(input$upload, list = TRUE)
Data <- ldply(unz(input$upload, files$Name[2:length(files$Name)]), parse_xml)
})
}
shinyApp(ui = ui, server = server)
在尝试解压缩文件的第一步,我已经收到一个错误:
Warning: Error in unzip: invalid zip name argument
有人对我该如何解决有任何想法吗?
UPD:通过将input$upload
更改为input$upload$datapath
,解决了第一个错误。 新错误:
Error in unz: invalid 'description' argument
如果有人需要它,这就是我打算做的:
library(shiny)
library(dplyr)
parse_xml <-function(FileName) {
a <- xmlParse(FileName)
print(1)
xmlToDataFrame(a, stringsAsFactors = FALSE) %>%
fill(Description, Min, Max, id, StartDateTime,
EndDateTime, .direction = "up") %>%
na.omit()
}
ui <- fluidPage(
column(width = 4,
fileInput("upload", "Upload", accept = ".zip")),
column(width = 4,
br(),
actionButton("process", "Process uploaded data"))
)
server <- function(input, output) {
observeEvent(input$process, {
files <- unzip(input$upload$datapath, list = TRUE)
unzip_xml <- function(i) {parse_xml(readLines(unz(input$upload$datapath, files$Name[i])))}
data <- lapply(1:length(files$Name), unzip_xml)
data1 <- bind_rows(data)
})
}
shinyApp(ui = ui, server = server)
它应该是files <- unzip(input$upload$name, list = TRUE)
而不是unzip(input$upload, list = TRUE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.