R Academy · Les

Werkmappen en bestandspaden

Gebruik getwd(), setwd() en here() voor betrouwbare platformonafhankelijke paden.

Les 3 van 413 stappen

Werkmappen en bestandspaden is een gratis R Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject R Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus R Academy bevat in totaal 4 lessen.

Wat is de werkmap?

De werkmap is de map die R gebruikt als uitgangspunt wanneer je naar bestanden verwijst met relatieve paden. Dit is de standaardlocatie waarin R zoekt en schrijft wanneer je geen volledig pad opgeeft. Elke R-sessie heeft op elk moment precies één werkmap.

# 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.R

setwd() — de werkmap wijzigen

setwd() wijzigt de werkmap voor de huidige R-sessie. De functie retourneert de vorige werkmap onzichtbaar, wat nuttig is om de vorige toestand te herstellen. Let op: setwd() in scripts wordt afgeraden in projectgerichte werkprocessen.

# 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 automatically

file.path() — draagbare paden samenstellen

file.path() stelt bestandspaden samen door onderdelen te verbinden met het juiste scheidingsteken voor het besturingssysteem (/ op Mac/Linux, \ op Windows). Gebruik deze functie altijd in plaats van tekenreeksen samen te voegen voor compatibiliteit tussen platformen.

# 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() — omzetten naar een absoluut pad

normalizePath() zet een relatief pad om naar de canonieke absolute vorm en verwerkt daarbij de onderdelen . (huidige map) en .. (bovenliggende map). Dit is essentieel wanneer je een ondubbelzinnige bestandslocatie moet opslaan of loggen.

# 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() en basename()

dirname() haalt het mapgedeelte van een pad op en basename() het bestandsnaamgedeelte. Dit zijn de R-equivalenten van de Unix-shellopdrachten dirname en 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() — controleren vóór het lezen

Controleer altijd of een bestand bestaat voordat je het probeert te lezen, om onduidelijke foutmeldingen te voorkomen. file.exists() retourneert TRUE of FALSE en werkt zowel voor bestanden als voor mappen.

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() — paden uit omgevingsvariabelen

Omgevingsvariabelen slaan paden op systeemniveau op, zoals de persoonlijke map, tijdelijke map en aangepaste app-paden. Sys.getenv() leest deze waarden, zodat je code zich aan verschillende systemen kan aanpassen zonder paden hard te coderen.

# 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-expansie

De tilde ~ is op Unix-achtige systemen een afkorting voor de persoonlijke map, maar de bestandsfuncties van R breiden deze niet altijd automatisch uit. path.expand() vervangt ~ door het daadwerkelijke pad naar de persoonlijke map.

# 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')

Bestanden weergeven met list.files()

list.files() (alias dir()) geeft bestanden in een map weer. Je kunt ze optioneel filteren met een patroon en optioneel volledige paden laten retourneren. Deze functie is onmisbaar wanneer je meerdere bestanden in een map moet verwerken.

# 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))

Paden maken en verwijderen

R heeft ingebouwde functies om mappen te maken en bestanden te beheren. Gebruik dir.create() om nieuwe mappen te maken, met recursive = TRUE voor geneste paden, en file.remove() om tijdelijke bestanden op te ruimen.

# 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')
}

Het pakket here — projectrelatieve paden

Het pakket here lost het probleem met de werkmap elegant op. here::here() bouwt altijd paden ten opzichte van de projecthoofdmap, waar het bestand .Rproj staat, ongeacht vanuit welke plek in het project je de functie aanroept.

# 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)

Korte controle

Je hebt de padtekenreeks 'data/raw/../clean/sales.csv'. Welke functie gebruik je om deze om te zetten in een schoon, canoniek absoluut pad?

Bestandspaden — belangrijkste punten

Robuuste verwerking van bestandspaden is essentieel voor reproduceerbare R-scripts:

  • getwd() / setwd() — de werkmap ophalen en instellen
  • file.path('a', 'b', 'c.csv') — platformonafhankelijk paden samenstellen
  • normalizePath(path, mustWork = FALSE) — omzetten naar een absoluut pad
  • dirname() / basename() — een pad splitsen in map en bestand
  • file.exists() — controleren voordat je gaat lezen
  • Sys.getenv('HOME') — systeempaden benaderen via omgevingsvariabelen
  • path.expand('~') — de tilde uitbreiden naar de thuismap
  • list.files(pattern = '\.csv$') — bestanden op extensie zoeken
  • dir.create(recursive = TRUE) — veilig geneste mappen maken
  • Gebruik het pakket here voor projectrelatieve paden in RStudio-projecten
# 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))
Gratis beginnen

Leer R met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
43
Lessen
159

Veelgestelde vragen

Is de les “Werkmappen en bestandspaden” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad R Academy, waaronder “Werkmappen en bestandspaden”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus R Academy bevat in totaal 4 lessen.

Wat leer ik in “Werkmappen en bestandspaden”?

Gebruik getwd(), setwd() en here() voor betrouwbare platformonafhankelijke paden. Je oefent met R Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met R Academy te beginnen?

Ervaring vooraf is niet nodig. R Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Werkmappen en bestandspaden”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over R Academy?

Ja. Elke les over R Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Scripts laden met source()
  2. Opmerkingen, stijl en leesbaarheid
  3. Werkmappen en bestandspaden
  4. R-projecten en werkruimtebeheer
← Terug naar R Academy