Spara de olika skripten med git (verkar överdrivet)
Whoa. Jag gjorde en faktisk dubbeltagning när jag läste det här: 1 det är motsatsen av överkill.
Version som styr dina skript (med Git eller något liknande) är absolut minimum och bör bli helt automatisk. För varje nytt projekt jag börjar är ett av de allra första stegen att utfärda kommandot git init
och att skapa ett fjärrlagringsförvar (på Github).
Att hålla koll av olika analyser använder jag en kombination av följande tillvägagångssätt:
- Skriv återanvändbara funktioner / skript och parametrisera. Parametrarna förvaras antingen inuti själva skriptet (som sedan anropar relevant funktion upprepade gånger) eller i en Makefile (jag rekommenderar Snakemake).
- Dokumentera de alternativa analysmetoderna; återigen kan det här vara en Makefile med olika regler för alternativa analyser, eller en uppsättning anteckningsböcker (via R Markdown).
- Har olika Git-grenar för ömsesidigt exklusiva metoder. I slutet av analysen slås en av dessa grenar samman till
master
och publiceras. Om jag vill publicera flera analysmetoder slår jag samman alla dessa grenar till master
och använder metoder (1) eller (2) för att aktivera dem samtidigt.
I Jag rekommenderar faktiskt att skapa en Makefile för varje analys; Jag har funnit att detta är det mest praktiska, självdokumenterande sättet att köra en analys. Det liknar närmast en bärbar dator för lab-lab. Fördelen med ett enda R Markdown-dokument är att körning av bara delar av analysen kan automatiseras helt och beroenden i arbetsflödet framgår av beroenden i Makefile-reglerna. Det här är mycket svårare i R Markdown.
För en tid sedan skapade jag ett exempel på arbetsflöde för analys för att visa hur detta kan struktureras. Numera skulle jag använda Snakemake istället för GNU make.
När det gäller din andra punkt:
Gör anteckningar i själva skriptet
"Anteckningar" är ett farligt djur: dokumentation är viktigt, men erfarenheten visar att det ibland är mycket svårt att hålla dokumentation synkroniserad med koden. Det finns ingen mekanism som säkerställer att dokumentation och kod faktiskt överensstämmer. Skillnader mellan antagen analys och faktiskt utförd analys kan bli mycket problematiska.
Människor föredrar därför att använda självdokumenterande kod så mycket som möjligt; det vill säga: att skriva kod så att dess betydelse blir omedelbart tydlig, utan kommentarer, även till någon som inte har arbetat med koden tidigare. Att göra det här är svårt och kräver övning, men förbättrar den totala kodkvaliteten. Återigen hjälper det här att använda en Makefile eftersom beroenden mellan reglerna självdokumenterar vilken typ av analys som utfördes.
Jeff Atwood har skrivit två grundläggande uppsatser om detta ämne:
De är två av de bästa råd om programmering som jag kan ge.
1 För att betona: ta en titt på redigeringshistoriken av detta svar.