Bright ile bir komployu kaydetmek için downloadButton'ı nasıl kullanacağımı anlamaya çalışıyorum. Paketteki örnek, bir .csv dosyasını kaydetmek için downloadButton / downloadHandler'ı gösterir. Buna dayanarak tekrarlanabilir bir örnek yapacağım.
İçin 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')
)
))
İçin 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())
}
)
})
Bu soruyu yanıtlıyorsanız, muhtemelen buna aşinasınızdır, ancak bunu çalıştırmak için yukarıdakileri ayrı komut dosyalarına ( ui.R
ve çalışma dizini içindeki server.R
bir klasöre ( foo
) kaydedin . Parlak uygulamayı çalıştırmak için, çalıştırın runApp("foo")
.
Kullanarak ggsave
, ggsave'nin filename
işlevi kullanamadığını belirten bir hata mesajı alıyorum (sanırım). Standart grafik cihazını kullanırsam (aşağıdaki gibi) Download Plot
hatasız çalışır ancak grafiği yazmaz.
DownloadHandler'ın arsa yazmak için çalışması için herhangi bir ipucu takdir edilecektir.
ggsave(file, plotInput(), device = png)
Bir aygıt (sarmalayıcı) işlevi oluşturmak yerine yalnızca kullanabilirsiniz .