2012-01-27 68 views
5

對於某些Web服務,我需要儘可能地加速按需ggplot2繪圖。隨着memoise的引入,一些緩存會自動引入到繪圖函數中,使第二個繪圖比第一個繪圖快得多。但是,我的Web服務僅在每個R會話中繪製一個繪圖,所以這在默認情況下不起作用。使用memoise預先緩存ggplot2輸出以用於Web服務

我想知道是否明智/可能/有用的做preaching(例如,做一些計算onload,實際請求之前),或保存/加載memoise緩存到磁盤的普通調用+輸出。

一個例子:

> library(ggplot2); 
> pdf(tempfile()); 
> system.time(print(qplot(speed, dist, color=speed, data=cars, geom=c("point", "smooth")))); 
    user system elapsed 
    0.496 0.008 0.512 
> system.time(print(qplot(speed, dist, color=speed, data=cars, geom=c("point", "smooth")))); 
    user system elapsed 
    0.312 0.004 0.322 
+0

我編輯了你的標題,我把它解釋爲你在哪裏尋找一個ggplot2版本,它是在它使用memoise(pre-memoise ggplot2)之前的版本。我希望這反映了你的意圖,如果不是,請隨時更改。 – 2012-01-27 08:48:13

+0

我很好奇你是否看到過''memoise()'g < - ggplot()...'函數帶來的速度提升。我做了同樣的事情(*在一個會話中),但在繪圖速度方面幾乎沒有任何改進。 也許我做錯了...... – maxheld 2015-07-17 14:34:59

回答

4

AFAIK,所述memoise包僅支持在會話高速緩存中。如果您退出R會話,則會丟失緩存。我不確定cacheSweave/knitr模型是否有助於您的Web服務,但我相信您必須像這兩個包一樣將緩存的結果寫入磁盤。如果運行相同的代碼(通過MD5驗證),則只需加載緩存即可。您可以提供一個示例,以便我可以更好地瞭解問題。

+0

'memoise'的[開發版本](https://github.com/hadley/memoise/releases)現在擁有'cache_filesystem'選項的持久緩存。 – 2016-12-20 22:09:36