我刚刚遇到了 R 包 furrr 和 future。我很想用它们来编写灵活的代码,如果在运行 Windows 或 OSX 的机器上可用,这些代码将使用多个内核。我希望默认的“可用”核心数量类似于parallel::detectCores()-1,
而不是detectCores().
似乎plan(multiprocess)
是几乎可以做到这一点的流线型、惯用的方式,但它默认使用机器上的所有核心。我遇到了更明确的方式来指定“计划”。主要使用默认行为的惯用方法是什么plan(multiprocess)
,但也将核心数量限制为比返回的任何数量少 1 detectCores()
?
编辑
根据上面@HernikB 的评论,我相信这个问题的合理答案将是options(future.plan="multiprocess",mc.cores = parallel::detectCores() - 1L)
.
编辑
我发现这种方法经常不使用多进程计划(或至少不与 并行future_map_dfr
),而它似乎可以。相比之下
nc<-detectCores()-1
plan(strategy=multiprocess, workers=nc)
似乎让它并行。留下这个问题没有答案。