Arbeitsverzeichnisse und Dateipfade
Verwenden Sie getwd(), setwd() und here() für zuverlässige plattformübergreifende Pfade.
Arbeitsverzeichnisse und Dateipfade ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist das Arbeitsverzeichnis?
Das Arbeitsverzeichnis ist der Ordner, den R als Ausgangspunkt verwendet, wenn Sie mit relativen Pfaden auf Dateien verweisen. Es ist der Standardspeicherort, an dem R nach Dateien sucht (und in den R schreibt), wenn Sie keinen vollständigen Pfad angeben. Jede R-Sitzung hat zu jedem Zeitpunkt genau ein Arbeitsverzeichnis.
# getwd() returns the current working directory
current_dir <- getwd()
cat('Working directory:', current_dir)
# All relative file references start from this location:
# read.csv('data.csv') <- looks in current_dir/data.csv
# source('R/helpers.R') <- looks in current_dir/R/helpers.Rsetwd() – Arbeitsverzeichnis ändern
setwd() ändert das Arbeitsverzeichnis für die aktuelle R-Sitzung. Die Funktion gibt das vorherige Arbeitsverzeichnis unsichtbar zurück, was zum Wiederherstellen des vorherigen Zustands nützlich ist. Hinweis: Die Verwendung von setwd() in Skripten wird in projektbasierten Arbeitsabläufen nicht empfohlen.
# Set a new working directory
old_dir <- setwd('/tmp')
cat('Now in:', getwd(), '\n')
# Restore original directory
setwd(old_dir)
cat('Restored to:', getwd(), '\n')
# Common anti-pattern (breaks on other machines):
# setwd('/Users/alice/Desktop/my_project') <- hardcoded!
# Better: use RStudio Projects which set wd automaticallyfile.path() – Portable Pfade erstellen
file.path() erstellt Dateipfade, indem Komponenten mit dem richtigen Trennzeichen für das Betriebssystem verbunden werden (/ unter Mac/Linux, \ unter Windows). Verwenden Sie die Funktion für plattformübergreifende Kompatibilität immer statt einer Verkettung von Zeichenketten.
# Build a path from components
data_path <- file.path('data', 'raw', 'sales.csv')
cat('Path:', data_path)
# On Unix: data/raw/sales.csv
# On Windows: data\raw\sales.csv
# Multiple levels
output_file <- file.path('output', '2024', 'Q1', 'report.pdf')
cat('Output:', output_file)
# Combine with getwd() for a full absolute path
full_path <- file.path(getwd(), 'data', 'sales.csv')
cat('Full path:', full_path)normalizePath() – In einen absoluten Pfad auflösen
normalizePath() wandelt einen relativen Pfad in seine kanonische absolute Form um und löst dabei die Komponenten . (aktuelles Verzeichnis) und .. (übergeordnetes Verzeichnis) auf. Dies ist unerlässlich, wenn Sie einen eindeutigen Dateispeicherort speichern oder protokollieren müssen.
# Resolve relative paths to absolute
abs_path <- normalizePath('.')
cat('Absolute cwd:', abs_path, '\n')
# Resolve a relative path
data_abs <- normalizePath(file.path('..', 'data', 'sales.csv'),
mustWork = FALSE)
cat('Resolved:', data_abs, '\n')
# mustWork = FALSE: do not error if file does not exist yet
# mustWork = TRUE (default): error if path does not exist
# Useful for building reliable log messages or config files
cat('normalizePath demo complete')dirname() und basename()
dirname() extrahiert den Verzeichnisteil eines Pfads, während basename() den Dateinamensbestandteil extrahiert. Dies sind die R-Entsprechungen der Unix-Shell-Befehle dirname und basename.
path <- '/Users/alice/projects/analysis/data/sales_2024.csv'
# Extract the directory
folder <- dirname(path)
cat('Directory:', folder, '\n')
# /Users/alice/projects/analysis/data
# Extract the file name
filename <- basename(path)
cat('File name:', filename, '\n')
# sales_2024.csv
# Remove file extension
name_only <- tools::file_path_sans_ext(filename)
cat('Name only:', name_only)file.exists() – Vor dem Lesen prüfen
Prüfen Sie immer, ob eine Datei vorhanden ist, bevor Sie versuchen, sie zu lesen, um kryptische Fehlermeldungen zu vermeiden. file.exists() gibt TRUE oder FALSE zurück und funktioniert sowohl für Dateien als auch für Verzeichnisse.
data_file <- file.path('data', 'sales.csv')
# Check existence before reading
if (file.exists(data_file)) {
cat('File found, loading...\n')
# df <- read.csv(data_file)
} else {
cat('File not found:', data_file, '\n')
stop('Cannot proceed without data file.')
}
# Check multiple files at once
files <- c('data/a.csv', 'data/b.csv', 'data/c.csv')
exists_vec <- file.exists(files)
cat('Files found:', sum(exists_vec), 'of', length(files))Sys.getenv() – Pfade aus Umgebungsvariablen
Umgebungsvariablen speichern systemweite Pfade, etwa zum Home-Verzeichnis, zum temporären Ordner und zu benutzerdefinierten App-Pfaden. Sys.getenv() liest diese Werte aus und macht Ihren Code an verschiedene Systeme anpassbar, ohne Pfade fest zu codieren.
# Get the home directory
home_dir <- Sys.getenv('HOME')
cat('Home:', home_dir, '\n')
# Get the temp directory
tmp_dir <- Sys.getenv('TMPDIR')
cat('Temp:', tmp_dir, '\n')
# Custom environment variable (set in .Renviron)
data_root <- Sys.getenv('DATA_ROOT', unset = '/default/data')
cat('Data root:', data_root, '\n')
# Use env vars to build portable paths
config_file <- file.path(home_dir, '.config', 'myapp', 'settings.json')
cat('Config path:', config_file)path.expand() – Tilde-Erweiterung
Die Tilde ~ ist auf Unix-ähnlichen Systemen eine Kurzform für das Home-Verzeichnis, aber die Dateifunktionen von R erweitern sie nicht immer automatisch. path.expand() ersetzt ~ durch den tatsächlichen Pfad zum Home-Verzeichnis.
# Expand tilde to full home path
short_path <- '~/.Rprofile'
full_path <- path.expand(short_path)
cat('Expanded:', full_path)
# e.g. /Users/alice/.Rprofile
# Useful when passing paths to external tools or logging
config_dir <- path.expand('~/.config/R')
cat('Config dir:', config_dir)
# Can expand multiple paths at once
paths <- c('~/data', '~/output', '~/scripts')
expanded <- path.expand(paths)
cat(expanded, sep = '\n')Dateien mit list.files() auflisten
list.files() (Alias dir()) listet Dateien in einem Verzeichnis auf, wahlweise nach einem Muster gefiltert und wahlweise mit vollständigen Pfaden. Die Funktion ist unverzichtbar, wenn Sie mehrere Dateien in einem Ordner verarbeiten müssen.
# List all files in current directory
all_files <- list.files('.')
cat('Files found:', length(all_files), '\n')
# Filter by extension
csv_files <- list.files('data', pattern = '\\.csv$', full.names = TRUE)
cat('CSV files:', length(csv_files), '\n')
# Recursive: include subdirectories
r_files <- list.files('R', pattern = '\\.R$',
full.names = TRUE, recursive = TRUE)
cat('R scripts:', length(r_files))Pfade erstellen und entfernen
R verfügt über integrierte Funktionen zum Erstellen von Verzeichnissen und Verwalten von Dateien. Verwenden Sie dir.create(), um neue Ordner anzulegen (mit recursive = TRUE auch für verschachtelte Pfade), und file.remove(), um temporäre Dateien zu löschen.
# Create a directory (will not error if it already exists)
dir.create('output/figures', recursive = TRUE, showWarnings = FALSE)
cat('Directory created\n')
# Create a temporary file
tmp_file <- tempfile(fileext = '.csv')
write.csv(data.frame(x = 1:3), tmp_file, row.names = FALSE)
cat('Temp file:', tmp_file, '\n')
# Remove the file when done
if (file.remove(tmp_file)) {
cat('Temp file cleaned up')
}Paket here – projektrelative Pfade
Das Paket here löst das Problem mit dem Arbeitsverzeichnis auf elegante Weise. here::here() erstellt unabhängig davon, von welcher Stelle im Projekt aus Sie die Funktion aufrufen, immer Pfade relativ zum Projektstammverzeichnis (in dem sich die Datei .Rproj befindet).
# install.packages('here')
# library(here)
# Always resolves from project root:
# here('data', 'raw', 'sales.csv')
# here('R', 'helpers.R')
# here('output', 'report.html')
# Without here: setwd() headaches when script is in a subfolder
# With here: same path works from any subfolder
# Demonstrate base-R equivalent approach:
project_root <- normalizePath(file.path(getwd(), '..'), mustWork = FALSE)
data_path <- file.path(project_root, 'data', 'sales.csv')
cat('Data path:', data_path)Schnelltest
Sie haben eine Pfadzeichenfolge 'data/raw/../clean/sales.csv'. Welche Funktion würden Sie verwenden, um daraus einen sauberen, kanonischen absoluten Pfad zu erstellen?
Dateipfade – wichtigste Erkenntnisse
Eine robuste Verarbeitung von Dateipfaden ist für reproduzierbare R-Skripte unverzichtbar:
getwd()/setwd()– Arbeitsverzeichnis abrufen und festlegenfile.path('a', 'b', 'c.csv')– betriebssystemunabhängige PfaderstellungnormalizePath(path, mustWork = FALSE)– in einen absoluten Pfad auflösendirname()/basename()– Pfad in Ordner und Datei aufteilenfile.exists()– vor dem Einlesen prüfenSys.getenv('HOME')– über Umgebungsvariablen auf Systempfade zugreifenpath.expand('~')– Tilde in das Home-Verzeichnis auflösenlist.files(pattern = '\.csv$')– Dateien anhand ihrer Erweiterung findendir.create(recursive = TRUE)– verschachtelte Verzeichnisse sicher erstellen- Verwenden Sie das Paket here für projektbezogene Pfade in RStudio-Projekten
# Robust file loading pattern:
data_file <- file.path('data', 'raw', 'sales.csv')
if (!file.exists(data_file)) {
stop(paste('Missing file:', normalizePath(data_file, mustWork = FALSE)))
}
# df <- read.csv(data_file)
cat('File path:', data_file, '\n')
cat('Full path:', normalizePath(data_file, mustWork = FALSE))Häufig gestellte Fragen
Ist die Lektion „Arbeitsverzeichnisse und Dateipfade“ kostenlos?
Ja — der vollständige Text von „Arbeitsverzeichnisse und Dateipfade“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Arbeitsverzeichnisse und Dateipfade“?
Verwenden Sie getwd(), setwd() und here() für zuverlässige plattformübergreifende Pfade. Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Arbeitsverzeichnisse und Dateipfade“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Skripte mit source() laden
- Kommentare, Stil und Lesbarkeit
- Arbeitsverzeichnisse und Dateipfade
- R-Projekte und Workspace-Verwaltung