Я распараллеливаю все oop, которое создает относительно большой набор данных на каждой итерации. Я использую foreach::foreach()
вместе с doParallel
бэкэндом. Когда я использую foreach стандартным способом, использование моей оперативной памяти увеличивается до того, как l oop будет завершено. Таким образом, я хотел бы, чтобы каждая итерация foreach сохраняла созданный набор данных в файл на диске и сразу же удаляла его из памяти. По сути, я хочу, чтобы каждая итерация имела только побочный эффект. Я пробовал следующее, где возвращаемые значения .combine = c
и NULL
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
}
Однако все созданные данные все еще сохраняются в памяти, пока l oop работает, а моя оперативная память все еще взрывается. Как мне добиться желаемого поведения?