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.R
i server.R
w 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ć filename
funkcji (tak mi się wydaje). Jeśli korzystam ze standardowego urządzenia graficznego (jak poniżej), to Download Plot
dział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).