Sto cercando di capire come usare downloadButton per salvare una trama con shiny. L'esempio nel pacchetto mostra downloadButton / downloadHandler per salvare un file .csv. Farò un esempio riproducibile basato su questo.
Per ui.R
shinyUI(pageWithSidebar(
headerPanel('Downloading Data'),
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "pressure", "cars")),
downloadButton('downloadData', 'Download Data'),
downloadButton('downloadPlot', 'Download Plot')
),
mainPanel(
plotOutput('plot')
)
))
Per server.R
library(ggplot2)
shinyServer(function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
plotInput <- reactive({
df <- datasetInput()
p <-ggplot(df, aes_string(x=names(df)[1], y=names(df)[2])) +
geom_point()
})
output$plot <- renderPlot({
print(plotInput())
})
output$downloadData <- downloadHandler(
filename = function() { paste(input$dataset, '.csv', sep='') },
content = function(file) {
write.csv(datatasetInput(), file)
}
)
output$downloadPlot <- downloadHandler(
filename = function() { paste(input$dataset, '.png', sep='') },
content = function(file) {
ggsave(file,plotInput())
}
)
})
Se stai rispondendo a questa domanda, probabilmente hai familiarità con questo, ma per farlo funzionare, salva quanto sopra in script separati ( ui.R
e server.R
in una cartella ( foo
) all'interno della directory di lavoro. Per eseguire l'app brillante, esegui runApp("foo")
.
Utilizzando ggsave
, ottengo un messaggio di errore che indica che ggsave non può utilizzare la filename
funzione (credo). Se utilizzo il dispositivo grafico standard (come sotto), Download Plot
funziona senza errori, ma non scrive il grafico.
Eventuali suggerimenti per far funzionare downloadHandler per la scrittura di grafici sarebbero apprezzati.
ggsave(file, plotInput(), device = png)
invece di creare una funzione dispositivo (wrapper).