我需要将多个形状文件加载到R会话中。目前,我正在单独加载每个形状文件。这有效,但需要很长时间才能使用我可用CPU的15%。最近,我尝试使用ForEach和DoParallel加载形状文件:
require(foreach)
require(doParallel)
require(rgdal)
files <- c(
"AHVENANMAA/AHVENANMAA",
"ETELA-KARJALA/ETELA-KARJALA",
"ETELA-POHJANMAA/ETELA-POHJANMAA_1",
"ETELA-POHJANMAA/ETELA-POHJANMAA_2",
"ETELA-SAVO/ETELA-SAVO_1"
)
registerDoParallel(cores = 8)
listOfCurrentProvinces <- (
foreach(
x = files,
.packages = "rgdal",
.inorder = FALSE
) %dopar%
readOGR(x, layer = "DR_LINKKI")
)
此方法有效并且非常快(它使用我100%的CPU)。但是,它占用了太多内存,特别是当我多次重复这个过程时。有没有什么方法可以使用ForEach和DoParallel而不会产生如此重大的内存命中?我的机器有8个处理器(4个物理和4个逻辑),并有16 GB的RAM。
答案 0 :(得分:0)
我做了几件似乎有帮助的事情。
1)仅使用registerDoParallel
命令注册ONCE核心数。
2)每次迭代后使用gc()
。
在我实施这些更改之前,我的记忆仅在4次(21次)迭代后爆炸。现在,我已经完成了6次迭代,并且可以轻松地使用50%的RAM。可用RAM的数量保持不变大约15分钟。