web-dev-qa-db-fra.com

«Erreur de mémoire insuffisante (Java)» lors de l'utilisation des packages R et XLConnect

J'ai essayé de charger une feuille de calcul Excel de ~ 30 Mo dans R à l'aide du package XLConnect.

Voici ce que j'ai écrit:

wb <- loadWorkbook("largespreadsheet.xlsx")

Et après environ 15 secondes, j'ai eu l'erreur suivante:

Erreur: OutOfMemoryError (Java): la limite de surcharge du GC a été dépassée.

Est-ce une limitation du package XLConnect ou existe-t-il un moyen de modifier mes paramètres de mémoire pour autoriser des fichiers plus volumineux?

J'apprécie toutes les solutions/astuces/conseils.

47
AME

Suivez les conseils de leur site Web :

options(Java.parameters = "-Xmx1024m")
library(XLConnect)
31
Henrico

Si vous avez toujours des problèmes avec l'importation de fichiers XLSX, vous pouvez utiliser cette option. La réponse avec "Xmx1024m" n'a pas fonctionné et j'ai changé en "-Xmx4g".

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

Ce lien était utile.

29
Maciej

Utilisez read.xlsx() dans le openxlsx package . Il ne dépend pas de rJava n'a donc que les limitations de mémoire de R lui-même. Je n'ai pas exploré en profondeur l'écriture et le formatage de XLSX mais il a des vignettes prometteuses. Pour lire de grandes feuilles de calcul, cela fonctionne bien.

Pointe du chapeau à @ Brad-Horn. Je viens de transformer son commentaire en réponse car j'ai aussi trouvé que c'était la meilleure solution!

14
vpipkt

Dans le cas où quelqu'un rencontre cette erreur en lisant non pas un énorme mais beaucoup fichiers, j'ai réussi à résoudre cette erreur en libérant Java mémoire de la machine virtuelle avec xlcFreeMemory(), Donc:

files <- list.files(path, pattern = "*.xlsx")
for (i in seq_along(files)) {
    wb <- loadWorkbook(...)
    ...
    rm(wb)
    xlcFreeMemory()  # <= free Java Virtual Machine memory !
}
10
user7843120

Cela semble être le cas, lorsque vous continuez à utiliser la même session R encore et encore sans redémarrer R-Studio. Le redémarrage de R-Studio peut aider à allouer un nouveau segment de mémoire au programme. Ça a marché pour moi tout de suite.

2
Lycone

Comme suggéré dans ce ici , assurez-vous d'exécuter la fonction d'option dans la première ligne de votre code. Dans mon cas, cela n'a fonctionné que lorsque j'ai redémarré la session R et que je l'ai exécutée en première ligne.

options(Java.parameters = "-Xmx4g" )
library(XLConnect)
1
Mohamed Eltarkawe

Chaque fois que vous utilisez une bibliothèque qui s'appuie sur rJava (comme RWeka dans mon cas), vous êtes obligé de toucher l'espace de mémoire par défaut (512 Mo) un jour. Maintenant, lorsque vous utilisez Java, nous connaissons tous l'argument JVM à utiliser (-Xmx2048m si vous voulez 2 gigaoctets de RAM). Ici, il s'agit simplement de savoir comment le spécifier dans l'environnement R.

   options(Java.parameters = "-Xmx2048m")
   library(rJava)
0
Rahul Pandey