IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Impossible d'allouer un vecteur de taille 12 Go


Sujet :

R

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 16
    Points
    16
    Par défaut Impossible d'allouer un vecteur de taille 12 Go
    Bonjour à tous,

    Je travaille en ce moment avec la package spgwr. Lorsque je cherche à réaliser un calcul à partir d'une base de 60 000 individus j’obtiens le message suivant « Impossible d'allouer un vecteur de taille 12 Go »

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gr2.gwr <- gwr(Logdens ~ Logdeau + Sq_alt,data=gr2_s2,bandwidth=35.99,hatmatrix=TRUE,gweight=gwr.Gauss)
    Comme R stocke tout dans la RAM et que je n'ai que 8 Go à ma disposition, je me demandais si il existait des solutions alternatives pour enregistrer directement dans le disque dur sans passer par la RAM.
    J'ai cherché du côté du package ff, mais d'après ce que j'ai compris il ne fonctionne qu'avec des objets de type standard (vecteur, matrice…). Or je travaille à partir du shapefile lu par maptools, et la fonction me renvoie un objet de type gwr.
    Je n'ai donc par réussi à utiliser cet outil. Je me demandais si il était possible de travailler directement avec une base de données, en enregistrant le résultat de la fonction dans une base sans passer par la RAM.
    Quelles sont les solutions possibles dans mon cas (à part racheter de la RAM bien sur )

    Merci à tous d'avance pour vos réponses.

  2. #2
    Membre régulier Avatar de Yoan73
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 75
    Points
    75
    Par défaut
    Salut,


    Quelques solutions : comme la commande gc(), le package "bigmemory". Cela peut provenir du fait que ta machine soit en 32 bits et qu'elle ait donc plus de mal à traiter les informations volumineuses.

    Voila, bon courage,

    Yoan

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 11
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    En fait la commande gc() ne sert qu'a libérer de la mémoire vive occupé par des objets. Lorsque l'on fait un rm() l'objet n'est pas physiquement supprimé il est juste supprimé de l'indexe. La commande gc() permet de supprimer les objets devenus inutiles. Dans le cas où la mémoire nécessaire dépasse la mémoire totale la commande ne sert à rien. j'avais déjà regardé big memory, le problème de ce package (enfin ce que j'en ai compris) et qu'il définit une nouvelle classe d'objets de type big.matrix qui permet l’enregistrement d'objets. Sauf que la package GWR exporte les résultats dans un objet gwr qui contient entre autre des données géolocalisées qui sont elles mêmes dans un format SDF (spatial data frame) qui dépend du package sp. La seule solution que j'ai trouvée (http://r-sig-geo.2731867.n2.nabble.c...td2820079.html) à été d'effectuer une sélection aléatoire d'objets (l'aléa est censé garantir une répartition spatiale équivalente), puis d'effectuer le calcul sur cette sélection pour ensuite interpoler les résultats. En fouillant un peu dans le code package je me suis rendu compte que l'algorithme créait une matrice carrée par individus (soit n^3 matrices), or comme j'avais une couche de 60 000 individus il aurait été impossible de réaliser ce calcul sur autant d'individus. Pour obtenir un résultat dans un temps acceptable j'ai été obligé d’effectuer un échantillonnage de 10 %. C'est par forcément la meilleure solution mais au moins j'ai un début de résultat.

    Merci pour l'aide

  4. #4
    Membre régulier Avatar de Yoan73
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 21
    Points : 75
    Points
    75
    Par défaut
    C'est bien le problème de R qui s'exécute exclusivement dans la RAM. Mais bon, on va pas se plaindre, pour un logiciel gratuit on peut déjà faire pas mal de choses^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/02/2008, 12h47
  2. minimum d'un vecteur de taille X
    Par bahiatoon dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/08/2007, 17h51
  3. Réponses: 4
    Dernier message: 05/05/2007, 20h12
  4. Réponses: 1
    Dernier message: 29/03/2007, 20h17
  5. [Débutant]Impossible d'énumérer un vecteur
    Par bzhhydde dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo