apps - Shiny R Zip mĂșltiples PDFS para descargar
embedding shiny apps in r markdown documents (2)
Lo siento si esto es demasiado simple ... Necesito comprimir un número de archivos PDF generados para descargar. Traté de usar la función Zip
, pero fallé con el error:
Warning: running command ''"zip" -r9X "pdfs.zip" "plot_1.pdf" "plot_2.pdf" "plot_3.pdf" "plot_4.pdf" "plot_5.pdf" '' had status 127
Error opening file: 2
Error reading: 6
A continuación se muestra mi código y cualquier sugerencia es bienvenida (basada en la aplicación brillante: desactivar botón de descarga ):
UI.R
library(shiny)
shinyUI(fluidPage(
singleton(tags$head(HTML(
''
<script type="text/javascript">
$(document).ready(function() {
// disable download at startup. data_file is the id of the downloadButton
$("#data_file").attr("disabled", "true").attr("onclick", "return false;");
Shiny.addCustomMessageHandler("download_ready", function(message) {
$("#data_file").removeAttr("disabled").removeAttr("onclick").html(
"<i class=//"fa fa-download//"></i>Download " + message.fileSize + " ");
});
})
</script>
''
))),
tabsetPanel(
tabPanel(''Data download example'',
actionButton("start_proc", h5("Click to start processing data")),
hr(),
downloadButton("data_file"),
helpText("Download will be available once the processing is completed.")
)
)
))
UI.R del servidor
library(shiny)
get_a_pdf_plot <- function(my_i){
pdf(paste("plot_", my_i, sep=""))
plot(1:my_i*5, 1:my_i*5,
xlim = c(1, my_i*5),
ylim = c(1, my_i*5),
main = paste("1:", my_i, sep = ""))
dev.off()
}
shinyServer(function(input, output, session) {
observe({
if (input$start_proc > 0) {
Sys.sleep(2)
session$sendCustomMessage("download_ready", list(fileSize= "Ready"))
}
})
output$data_file <- downloadHandler(
filename = ''pdfs.zip'',
content = function(fname) {
fs <- c()
tmpdir <- tempdir()
setwd(tempdir())
print (tempdir())
for (i in c(1,2,3,4,5)) {
path <- paste("plot_", i, ".pdf", sep="")
fs <- c(fs, path)
get_a_pdf_plot(i)
}
print (fs)
zip(zipfile="pdfs.zip", files=fs)
}
)
})
En get_a_pdf_plot
ha omitido el .pdf
get_a_pdf_plot <- function(my_i){
pdf(paste("plot_", my_i,".pdf", sep=""))
plot(1:my_i*5, 1:my_i*5,
xlim = c(1, my_i*5),
ylim = c(1, my_i*5),
main = paste("1:", my_i, sep = ""))
dev.off()
}
En su downloadHandler
su necesidad de indicar brillante en el tipo de descarga:
output$data_file <- downloadHandler(
filename = ''pdfs.zip'',
content = function(fname) {
fs <- c()
tmpdir <- tempdir()
setwd(tempdir())
print (tempdir())
for (i in c(1,2,3,4,5)) {
path <- paste("plot_", i, ".pdf", sep="")
fs <- c(fs, path)
get_a_pdf_plot(i)
}
print (fs)
zip(zipfile="pdfs.zip", files=fs)
},
contentType = "application/zip"
)
Esta idea me ayudó a configurar la exportación . Se ejecuta fuera de la caja en una Mac. Windows requiere descargar Rtools y señalar el zip en Rtools ( de esta pregunta ). No he tenido problemas todavía.
Sys.setenv(R_CMDZIP = ''C:/Rtools/bin/zip'')
La documentación de " ?zip
" menciona "En Windows, el valor predeterminado depende de un programa zip (por ejemplo, el de Rtools". Si apunta a un archivo comprimido ejecutable para su programa zip favorito, estoy seguro de que funcionará de manera similar (si no lo hace) quiero descargar Rtools).