首页 > 解决方案 > 在 R 中,你可以强制 foreach 只有副作用吗?

问题描述

我正在并行化一个循环,该循环在每次迭代时创建一个相对较大的数据集。我正在foreach::foreach()doParallel后端一起使用。当我以标准方式使用 foreach 时,我的 RAM 使用量在循环完成之前就爆炸了。因此,我想让 foreach 的每次迭代都将创建的数据集保存到磁盘上的文件中,然后立即将其从内存中删除。本质上,我希望每次迭代都只有一个副作用。我尝试了以下方法,其中 the.combine = cNULLreturn make foreach 最后只返回 NULL :

library(tidyverse)
library(foreach)
library(doParallel)

# parallel computation setup
numCores <- detectCores(logical = F)
registerDoParallel(numCores)

some_big_number <- 10

# foreach loop
foreach(i = 1:10, .combine = c) %dopar% {
  x <- rep(1, some_big_number) %>% enframe()  # task that creates large object
  filename <- paste0('X', i, '.csv')
  write_csv(x, filename)
  NULL
}

但是,在循环运行时,创建的所有数据似乎仍然堆积在内存中,并且我的 RAM 仍然爆炸。我怎样才能达到预期的行为?

标签: rparallel-processingside-effectsdoparallel

解决方案


推荐阅读