2017-07-15 3 views
0

Je suis confronté à un problème assez attendu tandis que je cours irritant le code ci-dessous qui crée toutes les combinaisons possibles pour une séquence spécifiée et puis les stocke dans la variable final.grid . Le fait est qu'il n'y a pas seulement une séquence mais des centaines de milliers d'entre eux et chacun pourrait avoir assez de combinaisons.Stocke une matrice croissante dans le disque dur et pas en mémoire

for()... 
    combs = get.all.combs(sequence) 
    final.grid = rbind(final.grid, combs) 

Quoi qu'il en soit. J'ai essayé d'exécuter mon code dans un PC Windows avec 4 Go de RAM et au bout de 4 heures (même pas la moitié des combinaisons étant calculé) R retourné cette erreur

Error: cannot allocate vector of size 4.0 Gb

ce que je bien que la solution est d'écrire après chaque itération la final.grid dans un fichier, libérez la mémoire allouée et continuez. La vérité est que je n'ai pas d'expérience sur de telles implémentations avec R et je ne sais pas quelle solution choisir et s'il y en a certaines qui feront mieux et plus efficacement. Gardez à l'esprit que ma grille finale nécessitera probablement quelques Go.

Quelque part dans l'échange de pile j'ai lu au sujet du paquet de ff mais il n'y avait pas assez de discussion sur le sujet (au moins je ne l'ai pas trouvé) et ai préféré demander ici vos opinions.

Merci

Répondre

0

Je ne comprends pas très bien votre question, parce que le morceau de code que vous mettez est pas clair pour comprendre votre problème. Mais, vous pouvez essayer d'enregistrer vos résultats en tant que fichiers .RData ou .nc, selon la nature de vos données. Cependant, il pourrait être mieux si vous êtes plus explicite sur votre problème, par exemple en montrant quel code est derrière la fonction get.all.combs ou sequence des données.

+0

Je ne pense pas que l'affichage de tout le code ici aidera à résoudre le problème. La fonction get.all.combs() renvoie une matrice énorme avec 4 colonnes et beaucoup de lignes. Cette matrice est ensuite ajoutée (avant chaque séquence) à la matrice final.grid qui peut atteindre quelques GB. –

0

Une chose que vous pouvez essayer est la fonction memory.limit() pour voir si vous pouvez allouer assez de mémoire pour votre travail. Cela peut ne pas fonctionner si votre système d'exploitation Windows est 32 bits.

Si vous avez un objet de données volumineux dont vous n'avez pas besoin pour certaines parties de votre programme, vous pouvez d'abord les supprimer, et les supprimer en utilisant 'rm', et lorsque vous en aurez besoin, vous pourrez les .

Le lien ci-dessous a plus d'informations qui pourraient vous être utiles. Increasing (or decreasing) the memory available to R processes

EDIT: Vous pouvez utiliser la fonction object.size pour voir l'exigence de mémoire pour les objets que vous avez. Si elles sont trop grandes, essayez de les charger seulement quand vous en avez besoin.

Il est possible qu'une des fonctions que vous utilisez essaie d'allouer plus de mémoire que vous n'en avez. Voyez si vous pouvez essayer de trouver où exactement le programme se bloque.

+0

Je vais essayer le memory.limit() en le fixant à 3Go et voir ce qui va se passer. –

+0

Si vous le réglez à 3 Go, cela signifie que vous réduisez la taille de la mémoire disponible pour R. Cela ne va pas aider. – Suren

+0

Vous aviez raison. Rien n'a changé. A propos de votre montage: je ne veux rien charger. J'ai juste un objet (matrice) qui, à travers les itérations, devient de plus en plus gros jusqu'à ce qu'il remplisse la mémoire. Maintenant, je vais essayer de diviser cet objet en plusieurs parties de 2Go. –