Предварительное кэширование вывода ggplot2 с использованием memoise для использования в веб-сервисе - PullRequest
5 голосов
/ 27 января 2012

Для некоторых веб-сервисов мне нужно максимально ускорить графики ggplot2. С введением памятки в функции построения графиков автоматически вводится некоторое кэширование, благодаря чему второй график значительно быстрее первого. Однако мой веб-сервис рисует только 1 график за сеанс R, так что по умолчанию это не помогает.

Мне было интересно, было бы разумно / возможно / полезно выполнить предварительное кэширование (например, выполнить некоторые вычисления при загрузке до фактического запроса) или сохранить / загрузить кеши памяти на диск для общих вызовов + вывода.

Пример:

> 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 Ответ

4 голосов
/ 27 января 2012

AFAIK, пакет memoise поддерживает только сессионный кеш. Если вы выходите из сеанса R, вы теряете кеш. Я не уверен, поможет ли модель cacheSweave / knitr для вашего веб-сервиса, но я считаю, что вы все равно должны записывать кэшированные результаты на диск, как эти два пакета. Если выполняется один и тот же код (проверяется MD5), вы просто загружаете кеш. Вы можете привести пример, чтобы я лучше знал проблему.

...