我想弄清楚如何使用downloadButton保存閃亮的陰謀。包中的示例演示了downloadButton/downloadHandler以保存.csv。我將基於此做出一個可重複的例子。保存在一個閃亮的應用程序中製作的陰謀
對於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')
)
))
對於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())
}
)
})
如果你回答這個問題,你可能熟悉這一點,但得到這個工作,保存到上述單獨的腳本( ui.R
和server.R
轉換爲工作目錄中的文件夾(foo
)。要運行閃亮的應用程序,請運行runApp("foo")
。
使用ggsave
,我收到一條錯誤消息,指出ggsave不能使用filename
函數(我認爲)。如果我使用標準圖形設備(如下所示),則Download Plot
可以正常工作,但不會寫入圖形。
任何獲得downloadHandler寫作地塊的提示將不勝感激。
我相信你的答案其實是正確的。你也可以使用'ggsave(file,plotInput(),device = png)'而不是創建一個設備(包裝)函數。 – 2014-08-23 16:01:49
@sebkopf我在干預的一年中錯過了你的答案! – alexwhan 2014-08-24 23:39:55
@Yihui這個解決方案對我不起作用:R版本3.1.0,ggplot2_1.0.0 shiny_0.10.1。保存框彈出,點擊保存,但沒有保存文件。有人可以確認嗎? – zx8754 2014-08-28 10:17:23