如何使用memoise :: memoise缓存并行计算的结果?

时间:2017-12-26 02:10:21

标签: r 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

我想已经复制了memoised函数,然后在每个fork中丢弃...是否有使用其他函数或包的简单替代方法?

1 个答案:

答案 0 :(得分:1)

将我的评论转化为答案:

R.cache包(我是作者)记忆到文件,这意味着缓存在R会话和并行R进程中工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。