Die R-Funktion setwd(Verzeichnis) ermöglicht es, das aktuelle Arbeitsverzeichnis (engl. working directory) zu wechseln und ist das Pendant zu getwd.

In R ist immer ein Verzeichnis das aktuelle Arbeitsverzeichnis, d.h. dieses Verzeichnis ist der Ausgangspunkt für relative Pfade und Dateien. Will ich eine Datei öffnen und gebe kein Verzeichnis an, dann geht R davon aus, dass die Datei im Arbeitsverzeichnis ist.

Das aktive Arbeitsverzeichnis bekommt man mit dem Befehl getwd(). Will man nun dieses ändern, dann benutzt man einfach setwd und gibt als Parameter einen String mit dem gewünschten Verzeichnis an, also z.B. setwd(„C:/temp“). Den Windows-Nutzer ist vielleicht aufgefallen, dass wir hier den Forward-Slash / statt des Backslash \ verwendet haben, wie bei Webadressen. Das liegt daran, dass der Backslash in Strings eine andere Bedeutung hat. Damit werden nämlich Sonderzeichen kodiert, z.B. schreibt „Hello\nWorld“ Hello in die erste und World in eine zweite Zeile, da \n für eine neue Zeile steht. Der Backslash „\“ selber kann durch Verdoppelung erzeugt werden, also „\\“. Man könnte das Verzeichnis „C:/temp“ also auch durch „C:\\temp“ darstellen, allerdings ist der Forward-Slash praktischer, da auch die Rückgabe von R, zum Beispiel bei list.files den Forward-Slash verwendet.

Achtung: Portabilität

Absolute Pfade sind immer mit Vorsicht zu geniessen. Stellt euch vor, ihr verschiebt das R-Programm in ein anderes Verzeichnis oder auf einen anderen PC. Dann müsst ihr alle im Skript verwendeten Verzeichnisse anpassen. Das ist insbesondere lästig, wenn ihr die Verzeichnisse mitten im Skript definiert bzw. ändert. Eine Lösung ist, alle verwendeten Daten in Unterverzeichnissen des Skript-Ordners anzulegen und relative Pfade zu benutzen. Am besten geht das, indem ihr in RStudio ein Projekt anlegt.

Das ist aber nicht immer praktikabel. Wenn wir Daten haben, die von mehreren Skripten/Projekten verwendet werden, wollen wir nicht immer eine Kopie von den zum Teil großen Dateien machen. Sinnvoll ist es dann, die Verzeichnisse ganz oben im Skript als Variablen zu definieren. So gibt es nur einen sofort einsehbaren Ort, an dem ihr Änderungen vornehmen müsst.

 

Beispiele für den R-Befehl setwd

Datenverzeichnis <- "D:/Daten"
 
#speichert das aktuelle Arbeitsverzeichnis in der Variable oldwd
oldwd <- getwd()
 
#setzt ein anderes Arbeitsverzeichnis
setwd(Datenverzeichnis)
 
#liest dort eine Datei
Daten <- read.csv2("Daten.csv")
 
#wechselt wieder in das alte Verzeichnis
setwd(oldwd)