"Ошибка нехватки памяти (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 может помочь выделить новую кучу памяти для программы. Это сработало для меня сразу.

Другие вопросы по тегам