2017-01-12 11 views
0

すでにプロットされているggplotイメージを再変換せずにダウンロードしようとしています。発見したすべてのソリューション(例:Save plots made in a shiny app)は、画像をダウンロードするときに再びフィギュアを作成する関数を呼び出します。 回避策はありますか?私のイメージは非常に複雑で、作成には時間がかかります。R shinyで再プロットせずにプロットをダウンロード

答えて

1

ggplot2::last_plot機能を使用します。

library(shiny) 
library(ggplot2) 
k <- 0 

runApp(list(
    ui = fluidPage(
    plotOutput("fooplot"), 
    textOutput("fook"), 
    downloadButton('foo') 
    ), 
    server = function(input, output) { 
    plotInput = function() { 
     k <<- k + 1 

     qplot(speed, dist, data = cars) 
    } 
    output$fooplot <- renderPlot({ 
     plotInput() 
    }) 

    output$fook <- renderPrint({ 
     k 
    }) 

    output$foo = downloadHandler(
     filename = 'test.png', 
     content = function(file) { 
     device <- function(..., width, height) { 
      grDevices::png(..., width = width, height = height, 
         res = 300, units = "in") 
     } 
     ggsave("myplot.png", plot = last_plot(), device = device) 
     }) 
    } 
)) 

はちょうどplotInputが二度呼ばれていないことを示すために含め、グローバルアサインメントの使用を許して。