在 Shiny 的压缩文件夹中下载多个 csv 文件
Download multiple csv files in a zipped folder in 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)
解决方案:在 zip()
调用之后包含 if(file.exists(paste0(fname, ".zip"))) {file.rename(paste0(fname, ".zip"), fname)}
。
最佳解决方案仍然不适合我。我在 Linux 服务器上的 RStudio Server 中工作。问题是 RStudio 无法自动找到 zip 可执行文件的路径。我不得不手动指定它。在命令行中,which zip
向我显示 /usr/bin/zip
。
所以,我只需要在我的代码顶部设置 R_ZIPCMD 环境变量。
Sys.setenv(R_ZIPCMD="/usr/bin/zip")
来源:zip()
的帮助文件提到 R_ZIPCMD。
有人可以指出我如何才能使这个下载 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)
解决方案:在 zip()
调用之后包含 if(file.exists(paste0(fname, ".zip"))) {file.rename(paste0(fname, ".zip"), fname)}
。
最佳解决方案仍然不适合我。我在 Linux 服务器上的 RStudio Server 中工作。问题是 RStudio 无法自动找到 zip 可执行文件的路径。我不得不手动指定它。在命令行中,which zip
向我显示 /usr/bin/zip
。
所以,我只需要在我的代码顶部设置 R_ZIPCMD 环境变量。
Sys.setenv(R_ZIPCMD="/usr/bin/zip")
来源:zip()
的帮助文件提到 R_ZIPCMD。