web-dev-qa-db-fra.com

Combinez et exécutez plusieurs scripts R à partir d'un autre script

Essentiellement, j'ai construit un modèle prédictif important en R avec environ 10 à 15 fichiers de script séparés pour collecter, trier, analyser et présenter mes données. Plutôt que de tout mettre dans un seul fichier de script gigantesque, je voudrais maintenir un certain niveau de modularité et exécuter chaque pièce à partir d'un script de contrôle, ou d'une sorte de mécanisme de contrôle comparable, comme je l'ai fait dans matlab auparavant. Est-ce possible dans R?

J'ai lu ce fil ainsi que ses fils associés, mais je n'ai pas trouvé cette réponse exacte. Organisation du code source R

16
Kris

Je pense que vous recherchez simplement la fonction source. Voir ?source. J'ai souvent un script maître qui source autre .R des dossiers.

16

Je suis un nouveau développeur et je réponds avec un exemple qui a fonctionné pour moi car personne n'a donné d'exemple. Un exemple d'utilisation de source ("myscript.R"), pour appeler un autre script R "myscript_A.R" ou "myscript_B.R" est le suivant-

if(condition==X){
    source("myscript_A.R")
}else{
    source("myscript_B.R")
}
3
Ajay B

J'ai fait ce que vous avez décrit et fractionné des morceaux de code dans des fichiers R séparés et j'ai exécuté la source (ceci) et la source (cela), mais j'ai douloureusement appris que les fonctions de sourcing (plutôt que les sous-routines/fichiers de script) sont la meilleure façon de procéder.

Voici 3 raisons possibles pour lesquelles nous aurions pu développer leurs scripts de cette manière et y rester, et 3 raisons pour lesquelles le passage aux fonctions est logique:

1) Nous voulions déboguer directement quand un script avait mal tourné (pouvoir suivre toutes les variables et leur état dans l'environnement global unique).

  • J'ai maintenant réalisé que le débogueur/traçage de RStudio est une bien meilleure façon de faire un vrai débogage.

2a) Nous ne savions pas quelles variables devaient être conservées pour plus tard (nous ne voulions pas savoir quelles variables mettre dans les fonctions et quelles variables sortir des fonctions)

  • Les fonctions nous forcent à être explicites sur ce qui est utilisé dans une partie d'un script et ce qui ne le fait pas, et sur ce qui est essentiel de garder à l'écart d'une partie d'un script, car il n'est pas nécessaire de sortir chaque partie de celui-ci. Les variables sont mieux conservées que dans les environnements dont elles sont nécessaires, plutôt que tout ce qui passe dans et hors de l'environnement mondial.
  • De plus, je pense que les environnements peuvent être des listes, donc je pense qu'il est possible de jeter un environnement entier dans des fonctions et hors ?? Besoin de faire plus de lecture/apprentissage à ce sujet.

2b) Nous avons un grand nombre de variables pour tout (paramètres/variables, réglages, différentes parties de données), il est donc impossible de tout ranger dans et hors des fonctions.

  • Avec des structures comme des listes, nous pouvons regrouper des catégories de variables et les envoyer dans des fonctions. Les fonctions peuvent également renvoyer des listes (plutôt que des variables).

SO connexe:

1
Arthur Yip

Bien que je comprenne votre besoin de modularité, pourquoi ne pas simplement créer un script unique pour la course qui vous intéresse. L'approvisionnement de plusieurs scripts entraîne la complexité de ne pas pouvoir transmettre des variables entre les scripts, sauf si vous écrivez dans des fichiers (ce qui gaspille les cycles de processeur). Vous pouvez même créer un script maître qui lirait le contenu textuel de chaque script, puis créer le script maître, puis exécuter ce script.

0
LearnPKPD