Как кешировать параллельно вычисленные результаты с memoise::memoise?
Я предварительно вычисляю результаты и кеширую их memoise
Функция памятной посылки. К сожалению, если я попытаюсь ускорить вычисления, запустив их параллельно с parallel::mclapply
Запоминания не бывает.
> f <- memoise::memoise(function (a, b) a)
> memoise::has_cache(f)("foo", "bar")
[1] FALSE
> parallel::mclapply(c("bar", "baz"), f, a = "foo")
[[1]]
[1] "foo"
[[2]]
[1] "foo"
> memoise::has_cache(f)("foo", "bar")
[1] FALSE
> sapply(c("bar", "baz"), f, a = "foo")
bar baz
"foo" "foo"
> memoise::has_cache(f)("foo", "bar")
[1] TRUE
Я предполагаю, что запомнившаяся функция копируется, а затем отбрасывается в каждом форке... Есть ли простая альтернатива, использующая другие функции или пакеты?
1 ответ
Решение
Превращаю мой комментарий в ответ:
Пакет R.cache (я - автор) запоминает файл, что означает, что кеш работает в R сессиях и в параллельных R процессах. Очевидно, что кэширование в файл добавляет немного накладных расходов по сравнению с кэшированием в память.