在Shiny中的压缩文件夹中下载多个csv文件

时间:2015-01-30 03:46:07

标签: r csv shiny

有人可以指出我如何使这个下载zip功能在server.R中工作?当我运行它时,我收到以下错误:

  • [1]“/ var / folders / 00 / 1dk1r000h01000cxqpysvccm005p87 / T // Rtmps3T6Ua”
  • write.csv中的警告(datasetInput()$ rock,file =“rock.csv”,sep =“,”): 尝试设置'sep'忽略
  • write.csv中的警告(datasetInput()$ pressure,file =“pressure.csv”,sep =“,”):尝试设置'sep'被忽略
  • write.csv中的警告(datasetInput()$ cars,file =“cars.csv”,sep =“,”): 尝试设置'sep'忽略
  • [1]“rock.csv”“pressure.csv”“cars.csv”
    • 添加:rock.csv(缩小54%)
    • 添加:pressure.csv(缩小42%)
    • 添加:cars.csv(缩减57%)
  • 打开文件时出错:2
  • 阅读错误:9

    library(shiny)
    
    # server.R
    server <- function(input, output) {
    
      datasetInput <- reactive({
        return(list(rock=rock, pressure=pressure, cars=cars))
      })
    
      output$downloadData <- downloadHandler(
        filename = 'pdfs.zip',
        content = function(fname) {
          tmpdir <- tempdir()
          setwd(tempdir())
          print(tempdir())
    
          fs <- c("rock.csv", "pressure.csv", "cars.csv")
          write.csv(datasetInput()$rock, file = "rock.csv", sep =",")
          write.csv(datasetInput()$pressure, file = "pressure.csv", sep =",")
          write.csv(datasetInput()$cars, file = "cars.csv", sep =",")
          print (fs)
    
          zip(zipfile=fname, files=fs)
        },
        contentType = "application/zip"
      )
    
    }
    
    # ui.R
    ui <- shinyUI(fluidPage(
      titlePanel('Downloading Data'),
      sidebarLayout(
        sidebarPanel(
          downloadButton('downloadData', 'Download')
        ),
        mainPanel()
        )
      )
      )
    
    shinyApp(ui = ui, server = server)
    

2 个答案:

答案 0 :(得分:3)

解决方案:在if(file.exists(paste0(fname, ".zip"))) {file.rename(paste0(fname, ".zip"), fname)}致电后加入zip()

答案 1 :(得分:1)

最重要的解决方案仍然不适合我。我在Linux服务器上使用RStudio Server。问题是RStudio无法自动定位zip可执行文件的路径。我不得不手动指定它。在命令行中,which zip向我显示/usr/bin/zip

所以,我只需要在代码的顶部设置R_ZIPCMD环境变量。

Sys.setenv(R_ZIPCMD="/usr/bin/zip")

来源:zip()的帮助文件提及R_ZIPCMD。