web-dev-qa-db-fra.com

Erreur: mémoire vectorielle épuisée (limite atteinte?) R 3.5.0 macOS

Je travaille depuis un certain temps avec un certain nombre de fichiers volumineux contenant des données d’expression génique, et j’ai récemment eu un problème avec le chargement de ces données dans R, après la mise à niveau vers R 3.5.0. Après avoir utilisé environ 8 Go de mémoire (mon mac a 16 Go de RAM), si j'essaie de lire dans un autre fichier, le message d'erreur suivant s'affiche:

Error: vector memory exhausted (limit reached?)

J'ai trouvé un message précédent ( Erreur: mémoire de vecteur épuisée (limite atteinte?) ) suggérant que j'essaie de définir la variable d'environnement R_MAX_VSIZE sur une valeur plus élevée. J'ai donc essayé ce qui suit:

Sys.setenv(R_MAX_VSIZE = 16e9)

Cependant, j'ai toujours la même erreur. Est-ce que je ne règle pas correctement la variable environnementale? y a-t-il quelque chose qui me manque?

Informations de session:

R version 3.5.0 (2018-04-23)
Platform: x86_64-Apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages: [1] data.table_1.11.4

loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0   
20
Graeme Frost

Pour ceux qui utilisent Rstudio, j'ai constaté que définir Sys.setenv('R_MAX_VSIZE'=32000000000) ne fonctionne que sur la ligne de commande et que définir ce paramètre lors de l'utilisation de Rstudio n'empêche pas cette erreur:

Error: vector memory exhausted (limit reached?)

Après avoir lu un peu plus, j'ai trouvé le fil this , qui clarifie le problème avec Rstudio et identifie une solution, illustrée ci-dessous:

Étape 1: Ouvrez le terminal,

Étape 2:

cd ~
touch .Renviron
open .Renviron

Étape 3: Enregistrez les éléments suivants en tant que première ligne de .Renviron:

R_MAX_VSIZE=100Gb 

Remarque: cette limite inclut à la fois la mémoire physique et virtuelle. la définition de _MAX_VSIZE = 16 Go sur un ordinateur doté de 16 Go de mémoire physique ne peut donc pas empêcher cette erreur. Vous devrez peut-être jouer avec ce paramètre, en fonction des spécifications de votre machine.

11
Graeme Frost

R 3.5 impose une nouvelle limite système pour l’allocation de mémoire. À partir des notes de publication:

La variable d’environnement R_MAX_VSIZE peut maintenant être utilisée pour spécifier la taille de tas maximale du vecteur. Sous macOS, sauf indication contraire de cette variable d’environnement, la taille maximale du segment de vecteur est définie sur 16 Go au maximum et sur la mémoire physique disponible. Cela évite que le processus R ne soit tué lorsque macOS libère de la mémoire.

Vous pouvez remplacer cela. Vous risquez de sur-associer et de tuer le processus, mais c'est probablement ce qui se passait si vous frappiez un mur dur avec R 3.4.4 ou tout ce que vous utilisiez auparavant.

Exécutez les opérations suivantes dans Terminal pour créer une variable d’environnement temporaire R_MAX_VSIZE D’une valeur de 32 Go (à modifier): export R_MAX_VSIZE=32000000000

Ou si vous ne voulez pas ouvrir Terminal et l'exécuter chaque fois que vous voulez démarrer une session R, vous pouvez ajouter la même ligne à votre profil bash. Ouvrez Terminal et trouvez votre profil bash open .bash_profile Et, dans un éditeur de texte, ajoutez la ligne ci-dessus.

Vous devrez toujours ouvrir Terminal et démarrer R à partir de là. Vous pouvez exécuter R dans le terminal en exécutant simplement R ou vous pouvez ouvrir l'interface graphique open -n /Applications/R.app.

Pour effectuer cette modification dans une session R, utilisez Sys.setenv('R_MAX_VSIZE'=32000000000) et pour vérifier la valeur, utilisez Sys.getenv('R_MAX_VSIZE').

9
SeaSpider

Une solution pour ceux qui ne connaissent peut-être pas la ligne de commande peut être trouvée ici :

En bref, la solution consiste à utiliser le package usethis.

usethis::edit_r_environ() ouvrira le .Renviron qui se trouve dans votre répertoire personnel. Ce .Renviron affecte tout le travail de Rstudio

usethis::edit_r_environ("project") ouvrira un .Renviron local à votre projet. Les modifications apportées à ce fichier n'affectent que le travail effectué dans ce projet Rstudio particulier.

Une fois ouvert, le R_MAX_VSIZE var peut être réglé.

La page liée contient également des liens vers ce blog , qui décrit le processus de démarrage de R en détail.

4
Mir Henglin