我对future()
,doFuture()
用法有疑问。
我希望并行运行N
次计算(使用foreach ... %dopar%
) - N
是我的计算机上拥有的核心数。为此,我使用future
:
library(doFuture)
registerDoFuture()
plan(multiprocess)
foreach(i = seq_len(N)) %dopar% {
foo <- rnorm(1e6)
}
当我同时运行N
次计算时,这就像一个魅力。但我需要实现另一个使用大量核心的分析步骤(例如,N
)。这就是代码的样子:
foreach(i = seq_len(N)) %dopar% {
foo <- rnorm(1e6)
write.table(foo, paste0("file_", i, ".txt"))
# This step uses high number of cores
system(paste0("head ", "file_", i, ".txt", " > ", "file_head_", i, ".txt")
}
我并行运行了多个rnorm
和head
,但由于head
使用了大量内核(假设这样),我的分析卡住了。
问题:
如何使用future
并行运行部分代码? (如何仅并行运行rnorm
,然后head
顺序运行?有没有使用另一个循环的解决方案?或者我应该切换到doSNOW
或parallel
?
PS:
我的真实代码看起来更像是这样:
library(doFuture)
library(dplyr)
registerDoFuture()
plan(multiprocess)
foreach(i = seq_len(N)) %dopar% {
step1(i) %>%
step2() %>%
step3() %>%
step4_RUN_SEQUENTIAL() %>% # I want to run this part not in parallel
step5() # I want to run this part again in parallel
}
对@Andrie评论的回复:
future()
是我在R中执行并行计算的方法。我是新手并且发现它最容易使用(与例如parallel::mcapply
相比)。但是,如果可以在doSNOW
或parallel
中执行我想要的操作,那么我非常乐意切换