Предварительное кэширование вывода ggplot2 с использованием memoise для использования в веб-службе

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

Мне было интересно, будет ли разумно/возможно/полезно выполнять предварительное кэширование (например, выполнять некоторые вычисления при загрузке перед фактическим запросом) или сохранять/загружать кеши 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

person Jeroen    schedule 27.01.2012    source источник
comment
Я отредактировал ваш заголовок, я интерпретировал его как то, что вы искали версию ggplot2, которая была до того, как она использовала memoise (pre-memoise ggplot2). Я надеюсь, что это отражает ваше намерение, и не стесняйтесь изменить его обратно, если нет.   -  person Paul Hiemstra    schedule 27.01.2012
comment
Мне любопытно посмотреть, заметили ли вы какие-либо улучшения в скорости, memoise()выполнив некоторые g <- ggplot()... функции. Я сделал то же самое (в пределах одного сеанса), но почти не заметил улучшения в скорости печати. Может я неправильно делаю...   -  person maxheld    schedule 17.07.2015


Ответы (1)


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

person Yihui Xie    schedule 27.01.2012
comment
разрабатываемая версия memoise теперь имеет постоянный кеш с параметром cache_filesystem. - person Matt Parker; 21.12.2016