apps r shiny shiny-server

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).