R中使用foreach时清理内存

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之前。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章