«Ошибка нехватки памяти (Java)» при использовании пакета R и XLConnect - PullRequest
46 голосов
/ 01 ноября 2011

Я попытался загрузить электронную таблицу Excel размером ~ 30 МБ в R с помощью пакета XLConnect.

Вот что я написал:

wb <- loadWorkbook("largespreadsheet.xlsx")

И примерно через 15 секунд я получил следующую ошибку:

Ошибка: OutOfMemoryError (Java): GCпревышен лимит накладных расходов.

Это ограничение пакета XLConnect или есть способ настроить мои параметры памяти, чтобы разрешить файлы большего размера?

Я ценю любые решения / советы / советы.

Ответы [ 7 ]

31 голосов
/ 01 ноября 2011

Следуйте советам с их сайта :

options(java.parameters = "-Xmx1024m")
library(XLConnect)
29 голосов
/ 07 сентября 2012

Если у вас все еще есть проблемы с импортом файлов XLSX, вы можете использовать эту опцию.Anwser с "Xmx1024m" не работал, и я изменил на "-Xmx4g".

options(java.parameters = "-Xmx4g" )
library(XLConnect)

Эта ссылка была полезной.

14 голосов
/ 17 декабря 2015

Используйте read.xlsx() в пакете openxlsx . Он не зависит от rJava, поэтому имеет ограничения по памяти только для самого R. Я не очень подробно исследовал написание и форматирование XLSX, но у него есть многообещающие виньетки. Для чтения больших таблиц это хорошо работает.

Шляпный наконечник @ Брэд-Хорну. Я только что превратил его комментарий как ответ, потому что я также нашел, что это лучшее решение!

10 голосов
/ 18 мая 2017

В случае, если кто-то сталкивается с этой ошибкой при чтении не одного огромного, а многих файлов, мне удалось устранить эту ошибку, освободив память виртуальной машины Java с помощью xlcFreeMemory(), таким образом:

files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
    wb <- loadWorkbook(...)
    ...
    rm(wb)
    xlcFreeMemory()  # <= free Java Virtual Machine memory !
}
2 голосов
/ 27 января 2017

Это похоже на случай, когда вы продолжаете использовать один и тот же R-сеанс снова и снова без перезапуска R-Studio.Перезапуск R-Studio может помочь выделить новую кучу памяти для программы.У меня это сработало сразу.

1 голос
/ 25 октября 2018

Как указано в этом здесь , обязательно запустите функцию option в первой строке вашего кода.В моем случае это сработало только тогда, когда я перезапустил сеанс R и запустил его в первой строке.

options(java.parameters = "-Xmx4g" )
library(XLConnect)
0 голосов
/ 05 января 2018

Всякий раз, когда вы используете библиотеку, основанную на rJava (например, RWeka в моем случае), вы обязательно попадете в пространство кучи по умолчанию (512 МБ) однажды.Теперь, когда вы используете Java, мы все знаем, какой аргумент JVM нужно использовать (-Xmx2048m, если вы хотите 2 гигабайта оперативной памяти).Здесь вопрос только в том, как указать его в среде R.

   options(java.parameters = "-Xmx2048m")
   library(rJava)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...