Próbuję dowiedzieć się, jak użyć downloadButton, aby zapisać działkę z błyszczącym. Przykład w pakiecie demonstruje metodę downloadButton / downloadHandler, aby zapisać plik .csv. Na tej podstawie stworzę powtarzalny przykład.
Dla 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')
)
))
Dla 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())
}
)
})
Jeśli odpowiadasz na to pytanie, prawdopodobnie znasz to, ale aby to zadziałało, zapisz powyższe w osobnych skryptach ( ui.Ri server.Rw folderze ( foo) w katalogu roboczym. Aby uruchomić błyszczącą aplikację, uruchom runApp("foo").
Używając ggsave, otrzymuję komunikat o błędzie wskazujący, że ggsave nie może użyć filenamefunkcji (tak mi się wydaje). Jeśli korzystam ze standardowego urządzenia graficznego (jak poniżej), to Download Plotdziała bezbłędnie, ale nie pisze grafiki.
Wszelkie wskazówki dotyczące tego, aby downloadHandler pracował nad pisaniem fabuł, byłyby mile widziane.
ggsave(file, plotInput(), device = png)zamiast tworzenia funkcji urządzenia (opakowania).