我需要将多个形状文件加载到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")
)这个方法很有效,而且非常快(它使用了我的CPU的100% )。然而,它使用了太多的内存,特别是当我重复这个过程很多次的时候。有没有什么方法可以使用ForEach和DoParallel而不会导致如此严重的内存占用?我的机器有8个处理器(4个物理处理器和4个逻辑处理器),并有16 GB的RAM。
发布于 2016-06-18 07:02:34
我做了几件似乎有帮助的事情。
1)只使用registerDoParallel命令注册一次核数。
2)每次迭代后使用gc()。
在我实现这些更改之前,我的记忆力只在4次(共21次)迭代后就爆炸了。现在,我已经完成了6次迭代,RAM使用率达到了50%。可用RAM的大小在大约15分钟内保持不变。
https://stackoverflow.com/questions/37890547
复制相似问题