openxlsx 라이브러리 덕분에 10개의 거대한 Excel 2007 파일을 data.frame 목록에 로드하는 루프가 있습니다. 지연이 추가되지 않으면 이 루프는 네 번째 파일에서 충돌이 발생합니다. 각 읽기 후에 500ms 지연을 추가하면 문제가 해결됩니다.
왠지 말해줘?
openxlsx는 Java(xlsx 라이브러리와 달리)를 사용하지 않지만 감소하는 것보다 빠르게 증가하는 "가비지 수집" 문제인 것 같습니다... 제가 옳다면, Openxlsx보다 "과학적인" 솔루션이 있을까요? 계획 단순 지연? (<< .jcall("java/lang/System",,"gc") >>과 유사합니다. 이는 Java 기반 xlsx 읽기 루프에 유용합니다.)
이것은 충돌하는 코드의 일부입니다(pb를 해결하는 sys.sleep 라인 사용).
Library(openxlsx)
...
for (index in 1:10) {
print(sprintf("Loading file : %s", List_files[index]))
Data[[List_years[index]]] <- readWorkbook(List_files[index], sheet=1, colNames=T, skipEmptyRows=T, detectDates=F)
Sys.sleep(0.5)
}
감사해요.
답변1
어제 이 문제에 대한 해결책을 찾았습니다. 사실 "gc()" 명령을 시도했지만 성공하지 못했습니다... 하지만 이는 재설정 옵션을 사용하여 강제로 정리해야 하기 때문입니다. 따라서 "gc(reset=T)"는 삽입된 지연보다 작동하고 더 효율적입니다.