downloadButtonを使用して光沢のあるプロットを保存する方法を理解しようとしています。パッケージの例は、.csvを保存するためのdownloadButton / downloadHandlerを示しています。それに基づいて再現可能な例を作ります。
ために 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)
デバイス(ラッパー)関数を作成する代わりに使用することもできます。