1
我有月度報告文件,每個文件大約70MB。我寫了下面的功能將它們合併成一個單一的文件:寫入功能時內存不足(R)
fusionfil<-function(ruta){
require(data.table)
fusionfrag<-paste0(ruta,grep("_filt",dir(ruta),value = TRUE))
datalist<-list()
for(frag in fusionfrag){
datalist[[frag]] <- fread(frag,colClasses="character")
}
datalist<-do.call(rbind,datalist)
fwrite(datalist,"fusion.csv")
}
但它會導致以下錯誤:
Warning messages:
1: In rbindlist(l, use.names, fill, idcol) :
Reached total allocation of 8082Mb: see help(memory.size)
2: In rbindlist(l, use.names, fill, idcol) :
Reached total allocation of 8082Mb: see help(memory.size)
但是,如果我把最後fwrite
出來,而不是分配的功能的輸出到一個變量,我可以寫沒有問題。我想了解這裏發生了什麼(如果有更高效的方法來實現我想要做的事情,那也會很棒)。
如果我'rm' datalist那麼'fwrite'怎麼會知道要寫什麼?我嘗試了一些與'datalist < - do.call(rbind,datalist)'行類似的東西,據我的理解,它應該替換與合併對象不再相關的data.tables列表。 – zipzapboing
好的,只要加上'gc()'就可以解決問題。謝謝! – zipzapboing
我錯過了列表和組合表具有相同的名稱。 –