使用memoise预先缓存ggplot2输出,以便在Web服务中使用

时间:2012-01-27 05:44:53

标签: r ggplot2 memoization cran

对于某些Web服务,我需要尽可能快地按需ggplot2绘图。随着memoise的引入,一些缓存会自动引入绘图功能,使第二个绘图明显快于第一个绘图。但是,我的Web服务每个R会话只绘制1个绘图,因此默认情况下这没有帮助。

我想知道进行预缓存是否明智/可行/有用(例如,在实际请求之前进行一些计算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

1 个答案:

答案 0 :(得分:4)

AFAIK,memoise包仅支持会话内缓存。如果退出R会话,则会丢失缓存。我不确定cacheSweave / knitr模型是否有助于您的Web服务,但我相信您必须将缓存的结果写入磁盘,无论如何这两个包。如果运行相同的代码(由MD5验证),则只需加载缓存即可。您可以提供一个示例,以便我更好地了解问题。