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

그러나 다음과 같은 오류가 발생합니다

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을 경우 변수에, 나는 문제없이 쓸 수있다. 나는 여기서 무슨 일이 벌어지고 있는지 이해하고 싶다. (그리고 내가하는 일을 성취하기위한보다 효율적인 방법이 있다면 그렇게해도 좋을 것이다.) fwrite의 호출하기 전에 일부 메모리

gc() 

을 삭제

답변

0

봅니다 동일한 효과를 얻을 수 있습니다.

업데이트 : 목록과 결합 된 표의 이름이 같지 않았습니다.

+0

만약 내가'rm' 데이터리스트라면'fwrite'는 무엇을 쓸지 어떻게 알 수 있을까요? 필자는'datalist zipzapboing

+0

좋아요, 단지'gc()'를 추가하면 문제가 해결되었습니다. 감사! – zipzapboing

+0

나는리스트와 결합 된 테이블이 같은 이름을 가지고 있다는 것을 놓쳤다. –

관련 문제