r - 在 R 中,你可以强制 foreach 只有副作用吗?
问题描述
我正在并行化一个循环,该循环在每次迭代时创建一个相对较大的数据集。我正在foreach::foreach()
与doParallel
后端一起使用。当我以标准方式使用 foreach 时,我的 RAM 使用量在循环完成之前就爆炸了。因此,我想让 foreach 的每次迭代都将创建的数据集保存到磁盘上的文件中,然后立即将其从内存中删除。本质上,我希望每次迭代都只有一个副作用。我尝试了以下方法,其中 the.combine = c
和NULL
return 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 仍然爆炸。我怎样才能达到预期的行为?
解决方案
推荐阅读
- java - 出于好奇,是否可以初始化一个 0×1 数组?
- firefox-addon - 如何使用承诺和回调将 chrome 扩展移植到 Firefox 插件
- vbscript - 如何在 VBScript 中返回 ArrayList?
- python - 在列表中查找特定字符
- css - DIV/SPAN 标签未在 GRID 的最后一个完整显示
- spring-boot - 如何将 ConstraintViolationException 500 错误转换为 400 错误请求?
- python - Compare two dictionaries returned from REST framework using pytest
- postgresql - 如何通过层次结构连接加入同一张表?
- php - 为什么不保存到数据库,excel导入
- javascript - Ag-Grid setRowData 没有设置网格内的数据