2012-01-27 115 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

相关问题