Как кешировать параллельно вычисленные результаты с 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 процессах. Очевидно, что кэширование в файл добавляет немного накладных расходов по сравнению с кэшированием в память.

Другие вопросы по тегам