"Ошибка нехватки памяти (Java)" при использовании пакета R и XLConnect
Я попытался загрузить электронную таблицу Excel размером ~30 МБ в R с помощью пакета XLConnect.
Вот что я написал:
wb <- loadWorkbook("largespreadsheet.xlsx")
И примерно через 15 секунд я получил следующую ошибку:
Ошибка: OutOfMemoryError (Java): превышен предел издержек GC.
Является ли это ограничением пакета XLConnect или есть способ настроить мои параметры памяти, чтобы учесть большие файлы?
Я ценю любые решения / советы / советы.
7 ответов
Следуйте советам с их сайта:
options(java.parameters = "-Xmx1024m")
library(XLConnect)
Если у вас все еще есть проблемы с импортом файлов XLSX, вы можете использовать эту опцию. Anwser с "Xmx1024m" не работал, и я изменил на "-Xmx4g".
options(java.parameters = "-Xmx4g" )
library(XLConnect)
Эта ссылка была полезной.
Использование read.xlsx()
в openxlsx
пакет Это не зависит от rJava
таким образом, имеет только ограничения памяти самого R. Я не очень подробно исследовал написание и форматирование XLSX, но в нем есть несколько многообещающих виньеток. Для чтения больших электронных таблиц это работает хорошо.
Шляпный наконечник @ Брэд-Хорну. Я только что превратил его комментарий как ответ, потому что я также нашел, что это лучшее решение!
В случае, если кто-то сталкивается с этой ошибкой при чтении не одного огромного, а множества файлов, мне удалось устранить эту ошибку, освободив память виртуальной машины Java с помощью xlcFreeMemory()
, таким образом:
files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
wb <- loadWorkbook(...)
...
rm(wb)
xlcFreeMemory() # <= free Java Virtual Machine memory !
}
Как предлагается здесь, обязательно запустите функцию option в первой строке вашего кода. В моем случае это сработало только тогда, когда я перезапустил R-сеанс и запустил его в первой строке.
options(java.parameters = "-Xmx4g" )
library(XLConnect)
Всякий раз, когда вы используете библиотеку, основанную на rJava (например, RWeka в моем случае), вы должны будете когда-нибудь использовать пространство кучи по умолчанию (512 МБ). Теперь, когда вы используете Java, мы все знаем, какой аргумент JVM нужно использовать (-Xmx2048m, если вы хотите 2 гигабайта оперативной памяти). Здесь вопрос только в том, как указать это в среде R.
options(java.parameters = "-Xmx2048m")
library(rJava)
Похоже, это тот случай, когда вы продолжаете использовать один и тот же R-сеанс снова и снова без перезапуска R-Studio. Перезапуск R-Studio может помочь выделить новую кучу памяти для программы. Это сработало для меня сразу.