Onlangs gebruikte ik R-scripts van anderen en moest ik mijn eigen R-code op andere computers uitrollen. De meeste daarvan bevatten ergens in de code een hardgecodeerd pad naar het script of de invoergegevens. Dat wordt een probleem wanneer code op verschillende computers moet draaien. Daarom volgt hier een snelle oplossing.

Hoewel ik Python boven R verkies, moet ik R af en toe toch gebruiken omdat sommige pakketten (nog) geen equivalent in Python hebben. Een probleem dat ik met R nogal vaak tegenkom, is dat de werkmap al dan niet op de map van het script wordt ingesteld, afhankelijk van hoe je een script uitvoert. Vooral wie graag .R-bestanden opent in RStudio zonder een degelijk project aan te maken (zoals ik vroeger deed; nu maak ik voor alles een RProject met een eigen renv) krijgt waarschijnlijk te maken met problemen waarbij de werkmap niet noodzakelijk de map is waarin het script staat. Een snelle, maar slordige oplossing is om aan het begin van het script met setwd() de werkmap in te stellen op je lokale map. Als dat script echter door iemand anders op diens computer moet worden uitgevoerd, moet dat pad worden aangepast. Het korte codefragment hieronder gebruikt het pakket this.path en lost dit probleem op. Zorg er wel eerst voor dat je dit pakket installeert met install.packages("this.path") .

Zodra dit pakket beschikbaar is, stel je de werkmap met de twee regels code hieronder eenvoudig in op de locatie van het script dat je uitvoert. Voor alle zekerheid kunnen we met print(getwd()) controleren of het pad juist is.

library(this.path)

setwd(this.dir())

In dat script moet je alle paden relatief ten opzichte van de locatie van het script definiƫren. Daarna werkt het op elk systeem! Althans wat de paden naar invoer, uitvoer en andere code betreft. Om ervoor te zorgen dat alle bibliotheken op elk systeem beschikbaar zijn en de versies overeenkomen, heb je renv nodig. Daar ga ik in een volgende post dieper op in, want het lost mijn andere problemen met R op.