Quels sont les moyens efficaces d'organiser le code R et la sortie? [fermé]

23

Je recherche des informations sur la façon dont les autres organisent leur code R et leur sortie.

Ma pratique actuelle consiste à écrire du code en blocs dans un fichier texte en tant que tel:

#=================================================
# 19 May 2011
date()
# Correlation analysis of variables in sed summary
load("/media/working/working_files/R_working/sed_OM_survey.RData")
# correlation between estimated surface and mean perc.OM in epi samples
cor.test(survey$mean.perc.OM[survey$Depth == "epi"], 
    survey$est.surf.OM[survey$Depth   == "epi"]))
#==================================================

Je colle ensuite la sortie dans un autre fichier texte, généralement avec quelques annotations.

Les problèmes avec cette méthode sont:

  1. Le code et la sortie ne sont pas liés explicitement autrement que par date.
  2. Le code et la sortie sont organisés chronologiquement et peuvent donc être difficiles à rechercher.

J'ai envisagé de créer un document Sweave avec tout, car je pourrais alors faire une table des matières, mais cela semble être plus compliqué que les avantages qu'il offrirait.

Faites-moi savoir toutes les routines efficaces que vous avez pour organiser votre code R et votre sortie qui permettraient de rechercher et de modifier efficacement l'analyse.

DQdlM
la source
2
Juste pour éviter le copier / coller, sink()ou capture.output()peut-être vos amis. Les utilitaires de génération de rapports, comme Hmisc , Sweave ou brew, méritent d'être pris en compte (votre point 1). Les systèmes de versioning ( rcs , svn ou git ) pourraient aider avec le point 2.
chl
@chl - merci pour les suggestions. Je n'étais pas au courant sink()et capture.output(). C'est génial.
DQdlM
1
aujourd'hui il y a aussi knitr!
kjetil b halvorsen

Réponses:

22

Vous n'êtes pas la première personne à poser cette question.

Bernd Weiss
la source
+1 et le premier lien que vous fournissez y font référence :-)
chl
@chl Merci! Je me demandais si cette question était en double et devait être fermée ...
Bernd Weiss
C'est IMO. Mais comme il n'y a pas de vote pour clore, je suis réticent à le clore. De plus, la plus ancienne était plus générale, mais une question très similaire a été fermée par le passé. Attendons de voir comment ça se passe.
chl
merci pour la liste! C'est très utile. Je pensais que je n'étais pas le premier à avoir cette question mais je ne semblais pas trouver grand-chose avec ma recherche initiale (évidemment inepte).
DQdlM
6

Pour ma part, j'organise tout en 4 fichiers pour chaque projet ou analyse. (1) «code» Où je stocke les fichiers texte des fonctions R. (2) 'sql' Où je conserve les requêtes utilisées pour collecter mes données. (3) 'dat' Où je conserve des copies (généralement csv) de mes données brutes et traitées. (4) 'rpt' Où je stocke les rapports que j'ai distribués.

TOUS mes fichiers sont nommés en utilisant des noms très verbeux tels que 'analysis_of_network_abc_for_research_on_modified_buffer_19May2011'

J'écris également une documentation détaillée à l'avance où j'organise l'hypothèse, les hypothèses, les critères d'inclusion et d'exclusion, et les étapes que j'ai l'intention de prendre pour atteindre mon livrable. Tout cela est inestimable pour une recherche répétable et facilite mon processus de définition d'objectifs annuels.

Volonté
la source
2

Maintenant que je suis passé à Sweave, je ne veux plus y retourner. Surtout si vous avez des tracés en sortie, il est tellement plus facile de garder une trace du code utilisé pour créer chaque tracé. Cela rend également beaucoup plus facile de corriger une petite chose au début et de la faire onduler dans la sortie sans avoir à relancer quoi que ce soit manuellement.

Aaron - Rétablir Monica
la source
1
Sweave est merveilleux. Il faut un certain temps pour s'y habituer, mais si vous connaissez déjà TeX et R, c'est le choix évident. Cela vous permet également de ne plus jamais perdre de temps à aligner des colonnes de table, ce qui est bien.
richiemorrisroe
merci pour l'entrée. Mes 2 problèmes avec Sweave sont 1) Je vais me retrouver avec un bazillion de fichiers dans mon répertoire - en particulier avec beaucoup de chiffres, et 2) Je devrai être très prudent avec le code pour éviter les hoquets à chaque fois que je compile tout le document (par exemple, je pense que quelque chose est chargé et ce n'est pas le cas). Avez-vous ces problèmes?
DQdlM
1) Vous pouvez choisir de supprimer les fichiers intermédiaires si vous le souhaitez; J'utilise le script Sweave.sh ( cran.r-project.org/contrib/extra/scripts/Sweave.sh ) qui le fait automatiquement; mais peut facilement être désactivé. Si vous faites cela, assurez-vous de savoir ce qu'il supprimera avant de l'utiliser pour éviter une éventuelle catastrophe. La version courte est que si aucun fichier ne partage le nom de base de votre fichier Rnw, vous êtes d'accord.
Aaron - Rétablir Monica
2) À mon avis, devoir être prudent de cette façon est une bonne chose, et parfois compiler mon document Sweave avec cet objectif précis à l'esprit, c'est-à-dire, pour m'assurer que j'ai correctement suivi tout ce qui est nécessaire pour recréer le une analyse.
Aaron - Rétablir Monica
1
@ naught101: Pour les analyses longues, je l'exécute séparément et enregistre les résultats, généralement dans un .RDatafichier, pour entrée par le document Sweave. Cependant, il existe également plusieurs excellentes options pour "mettre en cache" les résultats d'un bloc de code afin qu'il ne soit pas réexécuté.
Aaron - Rétablir Monica le
2

Pour structurer des fichiers de code .R uniques, vous pouvez également utiliser strcode , un complément RStudio que j'ai créé pour insérer des séparateurs de code (avec des titres facultatifs) et en fonction de ceux-ci - obtenir des résumés des fichiers de code. J'explique son utilisation plus en détail dans cet article de blog .

Lorenz Walthert
la source