2017-01-18 8 views
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") 
} 

しかし、それは、次のエラーが発生:私は最終的fwriteアウトを取り、代わりに、関数の出力を割り当てた場合、しかし、

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) 

変数に、私は問題なしでそれを書くことができます。私はここで何が起こっているのか理解したいと思います(もし私がしようとしていることを達成するためのより効率的な方法があればそれも素晴らしいでしょう)。

答えて

0

は、同じ効果を達成するためにfwriteの呼び出し前にいくつかのメモリ

gc() 

をクリアしてみます。

UPDATED:リストと結合表が同じ名前であることが忘れられました。

+0

もし 'rm'データリストであれば、' fwrite'は何を書くべきかを知っていますか?私は 'datalist zipzapboing

+0

さて、 'gc()'を追加するだけで問題が解決されました。ありがとう! – zipzapboing

+0

私はリストと結合されたテーブルが同じ名前を持っていたことを忘れました。 –

関連する問題