欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R中使用foreach时清理内存

程序员文章站 2022-04-16 15:18:18
...

foreach能较大的提高计算速度,但是R不会自动清理内存,导致服务器内存经常占用过高,因此使用时需要及时清理内存,以如下例子所示。
我需要读取一批excel文件,在运行下面的代码前,经过4次测试,Rstudio的内存情况是这样的(Mb):
232, 237, 231.8, 230.2
在执行下面的代码后

qcc_result <- foreach(i=1:length(result_files), .combine=rbind) %dopar% {
    require(readxl)
    f_path <- paste0("test/", result_files[i])
    # gc()
    return(read_xls(f_path, skip = 1, col_names = T))
}
gc() # 释放内存

内存占用为 397.6。

qcc_result <- foreach(i=1:length(result_files), .combine=rbind) %dopar% {
    require(readxl)
    f_path <- paste0("test/", result_files[i])
    gc() # 释放内存
    return(read_xls(f_path, skip = 1, col_names = T))
}
gc()  # 释放内存

执行了5次,执行完成后,内存使用分别为 352.9, 346, 373.1,369.0,346。显然,foreach每次执行时,本身也会占用内存,而且用完以后也不会释放,因此在foreach代码块中使用gc()释放内存后,也会减少使用的内存。

注意,gc()的位置要在return之前。

相关标签: R语言 r语言