Avec seulement 4 Go de RAM (exécutant Windows 10, alors faites-en environ 2 ou plus de manière réaliste 1 Go), j'ai dû être très prudent avec l'allocation.
J'utilise data.table presque exclusivement.
La fonction «fread» vous permet de sous-définir les informations par nom de champ lors de l'importation; importer uniquement les champs réellement nécessaires au départ. Si vous utilisez la lecture de base R, annulez les colonnes parasites immédiatement après l'importation.
Comme le suggère 42- , dans la mesure du possible, je vais ensuite sous-ensemble dans les colonnes immédiatement après l'importation des informations.
Je rm () fréquemment des objets de l'environnement dès qu'ils ne sont plus nécessaires, par exemple sur la ligne suivante après les avoir utilisés pour sous-définir autre chose, et appeler gc ().
'fread' et 'fwrite' de data.table peuvent être très rapides en comparaison avec les lectures et écritures de base R.
Comme le suggère kpierce8 , je réécris presque toujours tout ce qui se trouve dans l'environnement et je le redoute, même avec des milliers / centaines de milliers de petits fichiers à passer. Cela permet non seulement de maintenir l'environnement «propre» et de maintenir l'allocation de mémoire faible, mais, peut-être en raison du grave manque de RAM disponible, R a tendance à se planter fréquemment sur mon ordinateur; très fréquemment. La sauvegarde des informations sur le disque lui-même au fur et à mesure que le code progresse à travers différentes étapes signifie que je n'ai pas à recommencer dès le début s'il se bloque.
En 2017, je pense que les SSD les plus rapides tournent autour de quelques Go par seconde via le port M2. J'ai un SSD Kingston V300 50 Go (550 Mo / s) vraiment basique que j'utilise comme disque principal (avec Windows et R dessus). Je garde toutes les informations en vrac sur un plateau WD bon marché de 500 Go. Je déplace les ensembles de données sur le SSD lorsque je commence à travailler dessus. Ceci, combiné avec tout ce qui a «effrayé» et «écrit», a très bien fonctionné. J'ai essayé d'utiliser 'ff' mais je préfère le premier. Les vitesses de lecture / écriture 4K peuvent créer des problèmes avec cela; La sauvegarde d'un quart de million de fichiers 1k (valeur de 250 Mo) du SSD sur le plateau peut prendre des heures. Pour autant que je sache, il n'y a pas encore de package R disponible qui puisse optimiser automatiquement le processus de «chunkification»; par exemple, regardez combien de RAM un utilisateur a, tester les vitesses de lecture / écriture de la RAM / de tous les disques connectés puis suggérer un protocole de «chunkification» optimal. Cela pourrait produire des améliorations significatives du flux de travail / optimisations des ressources; par exemple, divisez-le en ... Mo pour le bélier -> divisez-le en ... Mo pour le SSD -> divisez-le en ... Mo sur le plateau -> divisez-le en ... Mo sur la bande. Il pourrait échantillonner des ensembles de données à l'avance pour lui donner un bâton de mesure plus réaliste à partir duquel travailler.
Beaucoup de problèmes sur lesquels j'ai travaillé dans R impliquent la formation de combinaisons et de permutations, de triplets, etc., ce qui ne fait que limiter la RAM, car ils s'étendent souvent au moins de manière exponentielle à un moment donné. Cela m'a fait me concentrer beaucoup d'attention sur la qualité plutôt que sur la quantité d'informations qui y sont fournies au départ, plutôt que d'essayer de les nettoyer par la suite, et sur la séquence des opérations de préparation des informations pour commencer (en commençant par l'opération la plus simple et l'augmentation de la complexité); par exemple sous-ensemble, puis fusionner / joindre, puis former des combinaisons / permutations, etc.
Il semble y avoir certains avantages à utiliser la lecture et l'écriture de base R dans certains cas. Par exemple, la détection d'erreurs dans 'fread' est si bonne qu'il peut être difficile d'essayer d'obtenir des informations vraiment en désordre dans R pour commencer pour les nettoyer. Base R semble également être beaucoup plus facile si vous utilisez Linux. La base R semble bien fonctionner sous Linux, Windows 10 utilise environ 20 Go d'espace disque alors qu'Ubuntu n'a besoin que de quelques Go, la RAM nécessaire avec Ubuntu est légèrement inférieure. Mais j'ai remarqué de grandes quantités d'avertissements et d'erreurs lors de l'installation de packages tiers dans (L) Ubuntu. Je ne recommanderais pas de dériver trop loin de (L) Ubuntu ou d'autres distributions de stock avec Linux car vous pouvez perdre tellement de compatibilité globale que cela rend le processus presque inutile (je pense que `` l'unité '' doit être annulée dans Ubuntu à partir de 2017 ).
Avec un peu de chance, cela pourrait aider les autres.