Estoy tratando de averiguar cómo usar downloadButton para guardar un gráfico con shiny. El ejemplo del paquete demuestra downloadButton / downloadHandler para guardar un .csv. Voy a hacer un ejemplo reproducible basado en eso.
por 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')
)
))
por 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())
}
)
})
Si está respondiendo a esta pregunta, probablemente esté familiarizado con esto, pero para que esto funcione, guarde lo anterior en scripts separados ( ui.Ry server.Ren una carpeta ( foo) dentro del directorio de trabajo. Para ejecutar la aplicación brillante, ejecute runApp("foo").
Al usar ggsave, aparece un mensaje de error que indica que ggsave no puede usar la filenamefunción (creo). Si utilizo el dispositivo gráfico estándar (como a continuación), Download Plotfunciona sin error, pero no escribe el gráfico.
Se agradecería cualquier consejo para que downloadHandler funcione para escribir gráficos.
ggsave(file, plotInput(), device = png)lugar de crear una función de dispositivo (envoltorio).