Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​Кеширование вызовов функций в R Кэширование функций позволяет кэшировать возвращаемые значения функций в зависимости от аргументов. Это может помочь сэкономить время при работе с вводом/выводом на повторяющихся данных при длительных вычислениях. Т.е. при вызове функции запоминаются значения аргументов, и полученный результат, и в случае повторного вызова функции с теми же параметрами, результат вычислений будет считан из кеша, и вам не потребуется ждать пока пройдут все вычисления повторно. Это может быть полезно например при обращении к справочникам по API, если данные в этих справочниках меняются не особо часто. Вряд ли вы каждые 3 минуты запускаете новые рекламные кампании. В R кеширование функций в удобном виде позволяет реализовать пакет memoise, построенный на основе пакета cachem. Простейший пример кеширования функции Что бы кешировать любую функцию, используйте memoise().
 
library(memoise)

f <- function(x) {
  Sys.sleep(1)
  mean(x)
}

mf <- memoise(f)

Используем кешированную функцию:
 
# первый запуск проводит расчёты и запоминает результат
system.time(mf(1:10))
#>    user  system elapsed
#>   0.002   0.000   1.003
# далее мы читаем результат из кеша
system.time(mf(1:10))
#>    user  system elapsed
#>   0.000   0.000   0.001

Конфигурация кеширования Вы можете управлять такими параметрами кеширования как: ● место физического хранения кеша ● длительность хранение кеша ● максимально допустимый размер кеша По умолчанию кеш сохраняется в оперативной памяти функцией cachem::cache_mem(), и хранится только в течении текущей R сессии. Но вы можете использовать функцию cachem::cache_disk(), и хранить кеш на жестком диске. Дополнительные аргументы функций cachem::cache_mem() и cachem::cache_disk() позволяют управлять размером кеша, директорией хранения кеша и некоторыми другими параметрами.
 
# Ограничиваем длительность хранения кеша 15 минутами
cm <- cachem::cache_mem(max_age = 15 * 60)
mf <- memoise(f, cache = cm)

# Хранить кеш внутри каталога "R-myapp" на уровне пользователя
# папка "C:/Users/Username/AppData/Local/R-myapp/R-myapp/Cache"
cd <- cachem::cache_disk(rappdirs::user_cache_dir("R-myapp"))
mf <- memoise(f, cache = cd)

Ссылки: - Примеры кода взяты из README пакета memoise #заметки_по_R