В R вы можете заставить foreach иметь только побочные эффекты? - PullRequest
1 голос
/ 30 января 2020

Я распараллеливаю все 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 работает, а моя оперативная память все еще взрывается. Как мне добиться желаемого поведения?

...