web-dev-qa-db-fra.com

Comment réparer OutOfMemoryError (Java): la limite de surcharge GC est dépassée dans r?

Je dois lire un fichier dans une liste de dossiers et enregistrer des données dans R. J'utilise le code suivant pour mes données de test et cela fonctionne. Lorsque j'utilise le code pour les données réelles, j'obtiens cette erreur
Erreur: OutOfMemoryError (Java): dépassement de la limite de surcharge GC Appelé depuis: niveau supérieur

C'est ce que j'ai fait pour mes données de test

parent.folder <- "C:/Users/sandesh/Desktop/test_R"
sub.folder <- list.dirs(parent.folder, recursive =TRUE)[-1]
file <- file.path(sub.folder, "sandesh1.xlsx")
library(xlsx)
library(plyr)
fun <- function(file) {
  df <- read.xlsx(file, sheetIndex=1)
}
df.big <- ldply(file, fun)
15
poshan

Il s'agit d'un problème typique dans rJava. Il est répondu dans la documentation XLConnect qui utilise également rJava pour se connecter à Excel de la même manière que la bibliothèque xlsx. Je cite ici :

"Cela est dû au fait que XLConnect (idem pour xlsx) doit copier l'intégralité de votre objet de données sur la JVM afin de l'écrire dans un fichier et la JVM doit être initialisée avec une limite supérieure fixe sur sa taille de mémoire." Pour changer ce montant, vous pouvez passer des paramètres à la JVM de R comme vous le pouvez à une ligne de commande Java processus via le support des options de rJava:

options(Java.parameters = "- Xmx1024m")

Notez, cependant, que ces paramètres sont évalués exactement une fois par session R lorsque la JVM est initialisée - c'est généralement une fois que vous chargez le premier package qui utilise Java support, vous devez donc le faire dès le début que possible. "

Comme il est mentionné ci-dessus, exécutez la fonction d'options au début de votre script avant de charger les bibliothèques et si vous l'exécutez via Rstudio, assurez-vous de le redémarrer avant d'exécuter le script.

De plus, veuillez noter qu'il n'est pas encore certain que même cela fonctionnera en fonction de la taille du fichier que vous essayez d'analyser.

29
LyzandeR