Ответ 1
Следуйте советам на веб-сайте:
options(java.parameters = "-Xmx1024m")
library(XLConnect)
Я попытался загрузить электронную таблицу Excel 30 МБ в R, используя пакет XLConnect.
Вот что я написал:
wb <- loadWorkbook("largespreadsheet.xlsx")
И примерно через 15 секунд я получил следующую ошибку:
Ошибка: OutOfMemoryError (Java): превышен верхний предел GC.
Является ли это ограничением пакета XLConnect или есть способ изменить настройки моей памяти, чтобы разрешить использование больших файлов?
Я ценю любые решения/советы/советы.
Следуйте советам на веб-сайте:
options(java.parameters = "-Xmx1024m")
library(XLConnect)
Если у вас все еще есть проблемы с импортом файлов XLSX, вы можете использовать этот opiton. 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 !
}
Это похоже на случай, когда вы снова и снова используете один и тот же R-сеанс без перезапуска R-Studio. Перезапуск R-Studio может помочь выделить новую кучу памяти для программы. Это сработало для меня сразу.
Как предложено здесь, убедитесь, что вы запустите функцию опции в первой строке вашего кода. В моем случае он работал только тогда, когда я перезапустил сеанс R и запустил его в первой строке.
options(java.parameters = "-Xmx4g" )
library(XLConnect)
Всякий раз, когда вы используете библиотеку, которая полагается на rJava (например, RWeka в моем случае), вы будете вынуждены ударить по умолчанию в кучу пространства (512 МБ). Теперь, когда вы используете Java, мы все знаем аргумент JVM для использования (-Xmx2048m, если вы хотите 2 гигабайта ОЗУ). Здесь речь идет только о том, как указать его в среде R.
options(java.parameters = "-Xmx2048m")
library(rJava)