2010-02-17 6 views
45

Tous,Organiser R Code source

Je commence à écrire du code R orienté objet pour la première fois et je prévois avoir plusieurs fichiers R avec des dépendances entre les deux. Je suis nouveau à R et n'ai encore rien écrit en dehors d'un seul script massif pour tester des idées. Y at-il des ressources en ligne qui donnent des conseils sur la façon dont on devrait organiser le code? À court de descriptions sur la façon de construire des paquets, je n'arrive pas à trouver une telle orientation. À ce stade, je veux juste organiser le code de telle sorte qu'il rende le chargement et l'interaction avec la collection de routines aussi simple que possible.

Appréciez les conseils que vous pouvez fournir.

Chris

+2

Copie possible: http://stackoverflow.com/questions/1266279/how-to-organize-large-r-programs – Shane

Répondre

41

Cette question est très étroitement liée à: "How to organize large R programs?"

Vous devriez envisager de créer un package R. Vous pouvez utiliser la fonction package.skeleton pour commencer avec un ensemble de fichiers R. Je recommande fortement d'utiliser roxygen pour documenter le paquet au début, parce qu'il est beaucoup plus difficile de le faire après le fait.

Lecture "Writing R Extensions". Le livre en ligne "Statistiques avec R" a a section on this subject. Jetez également un coup d'œil à Creating R Packages: A Tutorial par Friedrich Leisch. Enfin, si vous êtes à New York, venez à la prochaine réunion du groupe d'utilisation de NY à "Authoring R Packages: a gentle introduction with examples".

Juste pour ressasser quelques suggestions sur les bonnes pratiques:

  • Un package vous permet d'utiliser R CMD check ce qui est très utile pour attraper des insectes; séparément, vous pouvez utiliser le package codetools.
  • Un package vous oblige également à faire une quantité minimale de documentation, ce qui conduit à de meilleures pratiques à long terme.
  • Vous devriez également envisager de faire des tests unitaires (par exemple avec RUnit) si vous voulez que votre code soit robuste/maintenable. Vous devez envisager d'utiliser un guide de style (par exemple, Google Style Guide).
  • Utilisez un système de contrôle de version depuis le début, et si vous voulez créer votre code source ouvert, pensez à utiliser github ou r-forge.

Edit:

En ce qui concerne la façon dont n'apporter des modifications supplémentaires sans reconstruire et installer le package complet: je trouve la meilleure chose à faire est de faire des changements dans votre fichier R concerné puis utilisez la commande source charger ces changements. Une fois que vous chargez votre bibliothèque dans une session R, elle sera toujours inférieure dans l'environnement (et moins prioritaire) que le .GlobalEnv, de sorte que toutes les modifications que vous chargez ou chargez directement seront utilisées en premier (utilisez la commande search ce). De cette façon, vous pouvez faire en sorte que votre package soit sous-jacent et vous remplacez les modifications au fur et à mesure que vous les testez dans l'environnement.

Alternativement, vous pouvez utiliser un IDE comme StatET ou ESS. Ils facilitent le chargement de lignes ou de fonctions individuelles dans un paquet R. StatET est particulièrement bien conçu pour gérer la gestion de paquets dans une structure de type répertoire.

+0

Merci Shane. Exactement les conseils que je cherchais. – Chris

+1

Donc, voici une autre question qui a été soulevée dans la discussion sur les SO que vous avez mentionnée et qui était restée sans réponse. Comme vous modifiez/ajoutez du code au paquet de développement, comment rechargez-vous le contenu du paquet sans passer par une installation? Y a-t-il un moyen pratique? J'essaie juste de comprendre le cycle que vous traversez lorsque vous écrivez du code et que vous testez. – Chris

+3

Regardez la fonction "sourceDir" qui se trouve dans la section d'exemple du fichier d'aide pour la fonction "source" (tapez "? Source" à l'invite R commnand). J'ai une fonction très similaire dans mon fichier ~/.Rprofile, et je sourceDir() le répertoire mypackage/R du paquet que je construis au fur et à mesure que je le modifie. De temps en temps, je vais réinstaller le paquet, mais je trouve que c'est plus facile de faire des changements incrémentiels sans faire disparaître le travail en cours dans l'interpréteur. –

0

Ceci est à l'avantage des autres personnes qui sont dirigées vers ce post lors de leur recherche. Moi aussi, je faisais exactement face au même scénario et je n'ai trouvé aucune ressource qui l'expliquait clairement. Voici ma tentative de mettre la solution en quelques étapes simples:
1) Créer un nouveau répertoire de projet
2) Créer un package par studio R (même procédé que ci-dessus)
3) Conserver à la fois au même endroit (pour éviter la confusion).
4) Installer et charger les paquets: devtools et et roxygen2.
5) utiliser la fonction load_all().

Et vous avez terminé.

+0

what's function '' 'load_all()' '' '? Load_all charge un paquet. –

+0

Il simule à peu près ce qui se passe lorsqu'un paquet est installé et chargé avec la bibliothèque –