【发布时间】:2018-06-06 23:38:29
【问题描述】:
我正在使用 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
我想在每个 fork 中都复制了 memoised 函数然后丢弃......有没有使用其他函数或包的简单替代方法?
【问题讨论】:
-
R.cache 包(我是作者)memoizes 到文件,这意味着缓存跨 R 会话和并行 R 进程工作。显然,与缓存到内存相比,缓存到文件会增加一些开销。
-
确实,
R.cache::addMemoization()完全符合我的需求,非常感谢。您能否将您的评论更改为答案,以便我将其标记为已接受?