Speichern Sie Diagramme, die in einer glänzenden App erstellt wurden

Ich versuche herauszufinden, wie man mit downloadButton einen Plot mit shiny speichert. Das Beispiel im Paket zeigt downloadButton / downloadHandler zum Speichern einer CSV-Datei. Darauf aufbauend mache ich ein reproduzierbares Beispiel.

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

Zumserver.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())
    }
  )
})

Wenn Sie diese Frage beantworten, sind Sie wahrscheinlich damit vertraut. Um dies jedoch zum Laufen zu bringen, speichern Sie die obigen Informationen in separaten Skripten (ui.R undserver.R in einen Ordner (foo) innerhalb des Arbeitsverzeichnisses. Führen Sie aus, um die glänzende App auszuführenrunApp("foo").

Verwendenggsave, Ich erhalte eine Fehlermeldung, die besagt, dass ggsave das nicht verwenden kannfilename Funktion (denke ich). Wenn ich das Standard-Grafikgerät (wie unten) verwende, wird dasDownload Plot funktioniert fehlerfrei, aber die Grafik wird nicht geschrieben.

Alle Tipps, um downloadHandler zum Schreiben von Plots zum Laufen zu bringen, sind willkommen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage