由于 openxlsx 库,我有一个循环将 10 个巨大的 excel 2007 文件加载到 data.frame 列表中。当不添加延迟时,此循环在第四个文件处崩溃。每次读取后添加 500ms 的延迟即可解决问题。
你能告诉我为什么吗?
即使openxlsx不使用Java(与xlsx库不同),我猜这是一个“垃圾收集”的问题,其增长速度比减少速度快...如果我是对的,是否存在比a更“科学”的解决方案简单的延迟? (类似于 << .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)”有效并且比插入的延迟更有效。