2012-01-27 4 views
5

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

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

Я отредактировал ваш заголовок, я интерпретировал его как то, что вы искали версию ggplot2, которая была до того, как использовалась memoise (pre-memoise ggplot2). Надеюсь, это отражает ваше намерение и не стесняйтесь изменить его, если нет. –

+0

Мне любопытно узнать, видели ли вы какие-либо улучшения скорости с помощью memoise(), используя некоторую функцию 'g <- ggplot() ...'. Я сделал то же самое (* в течение * одной сессии), но почти не видел улучшения в скорости печати. Возможно, я делаю это неправильно ... – maxheld

ответ

4

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

+0

[версия для разработки] (https://github.com/hadley/memoise/releases) в memoise теперь имеет постоянный кеш с опцией 'cache_filesystem'. –