5

对于某些网络服务,我需要尽可能地加快按需 ggplot2 绘图。随着 memoise 的引入,绘图函数会自动引入一些缓存,使第二个绘图明显快于第一个绘图。但是,我的 Web 服务每个 R 会话仅绘制 1 个图,因此默认情况下这无济于事。

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

1 回答 1

4

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

于 2012-01-27T19:47:39.013 回答