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