2016-01-17 1 views
0

J'ai une série de scripts R pour effectuer les multiples étapes de l'analyse des données dont j'ai besoin. Certains d'entre eux prennent beaucoup de temps et créent vraiment de gros objets. J'ai remarqué que si je les ai tous ramenés à la suite (via un script main.R), le traitement pour les étapes ultérieures prend beaucoup plus de temps que si je source un script, enregistrer ce dont j'ai besoin, et redémarrer R pour le suivant étape (chargement des données dont j'ai besoin). Je me demandais s'il y avait un moyen , via Rscript ou un script Bash peut-être, que je pourrais réaliser cela. Il devrait y avoir des objets qui persistent pour les 2 premiers scripts (qui chargent mes données externes et créent les objets qui seront utilisés pour toutes les autres étapes ). Je suppose que je pourrais aussi juste les sauvegarder et les charger dans d'autres scripts.Exécuter plusieurs scripts R avec quitter/redémarrer entre les deux sur Linux

(Je voudrais également passer un certain nombre d'arguments nommés à ce script, que je pense que je peux trouver sur d'autres SO messages et peut utiliser quelque chose comme optparse.)

Ainsi, le script ressemblerait à quelque chose comme ceci, je pense:

#! /bin/bash 
Rscript 01_load.R # Objects would persist, ideally 
Rscript 02_create_graphs.R # Objects would persist, ideally 
Rscript 03_random_graphs.R # contains code to save objects 
#exit R 
Rscript 04_permutation_analysis.R # would have to contain code to load data 
#exit 

Et ainsi de suite. Y a-t-il une solution à cela? J'utilise R 3.2.2 sur 64 bits CentOS 6. Merci.

Répondre

0

Chris,

il semble que vous devriez faire un peu de ménage manuelle entre (ou dans) vos étapes en utilisant gc() et peut-être aussi rm(). Pour plus de détails, voir help(gc) et help(rm).

Ainsi, au lieu de R de sortie et le redémarrer à nouveau, vous pouvez faire:

rm(list = ls()) 
gc() 

Mais s'il vous plaît noter: rm(list = ls()) jetteraient tous vos objets. Mieux vous créez une liste appropriée d'objets que vous voulez vraiment jeter et passez cette liste à rm().

+0

Merci pour votre réponse. J'aurais dû mentionner que j'ai essayé d'utiliser 'gc()'. Bien que cela aide en termes de gestion de la mémoire, cela ne semble pas aller aussi vite que de lancer une session propre. Bien que je n'ai pas fait de tests approfondis à ce sujet. –