Répertoires de travail et chemins de fichiers
Utilisez getwd(), setwd() et here() pour obtenir des chemins fiables sur toutes les plateformes.
Répertoires de travail et chemins de fichiers est une leçon R Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage R Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours R Academy comprend 4 leçons au total.
Qu’est-ce que le répertoire de travail ?
Le répertoire de travail est le dossier qu’utilise R comme point de départ lorsque vous faites référence à des fichiers avec des chemins relatifs. Il s’agit de l’emplacement par défaut dans lequel R recherche les fichiers et les enregistre lorsque vous ne fournissez pas de chemin complet. Chaque session R possède exactement un répertoire de travail à un instant donné.
# 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() — Modifier le répertoire de travail
setwd() modifie le répertoire de travail pour la session R actuelle. Elle renvoie invisiblement le répertoire de travail précédent, ce qui est utile pour restaurer l’état initial. Remarque : l’utilisation de setwd() dans des scripts est déconseillée dans les flux de travail fondés sur des projets.
# 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() — Construire des chemins portables
file.path() construit des chemins de fichiers en reliant leurs composants avec le séparateur adapté au système d’exploitation (/ sur Mac/Linux, \ sur Windows). Utilisez-la toujours plutôt que la concaténation de chaînes pour assurer la compatibilité entre les plateformes.
# 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() — Résoudre un chemin absolu
normalizePath() convertit un chemin relatif dans sa forme absolue canonique, en résolvant les composants . (répertoire actuel) et .. (répertoire parent). C’est indispensable lorsque vous devez stocker ou journaliser un emplacement de fichier sans ambiguïté.
# 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() et basename()
dirname() extrait la partie correspondant au répertoire d’un chemin, tandis que basename() en extrait la partie correspondant au nom du fichier. Ce sont les équivalents R des commandes d’interpréteur Unix dirname et 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() — Vérifier avant de lire
Vérifiez toujours qu’un fichier existe avant d’essayer de le lire, afin d’éviter des messages d’erreur énigmatiques. file.exists() renvoie TRUE ou FALSE et fonctionne aussi bien pour les fichiers que pour les répertoires.
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() — Chemins issus des variables d’environnement
Les variables d’environnement stockent des chemins de niveau système, comme le répertoire personnel, le dossier temporaire et les chemins personnalisés d’applications. Sys.getenv() lit ces valeurs, ce qui permet à votre code de s’adapter à différents systèmes sans inscrire les chemins en dur.
# 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() — Développer le tilde
Le tilde ~ est une abréviation du répertoire personnel sur les systèmes de type Unix, mais les fonctions de gestion des fichiers de R ne le développent pas toujours automatiquement. path.expand() remplace ~ par le chemin réel du répertoire personnel.
# 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')Répertorier les fichiers avec list.files()
list.files() (alias dir()) répertorie les fichiers d’un répertoire, avec la possibilité de les filtrer selon un motif et de renvoyer éventuellement leurs chemins complets. Cette fonction est indispensable lorsque vous devez traiter plusieurs fichiers dans un dossier.
# 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))Créer et supprimer des chemins
R fournit des fonctions intégrées pour créer des répertoires et gérer les fichiers. Utilisez dir.create() pour créer de nouveaux dossiers, avec recursive = TRUE pour créer des chemins imbriqués, et file.remove() pour supprimer les fichiers temporaires.
# 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')
}Package here — chemins relatifs au projet
Le package here résout élégamment le problème du répertoire de travail. here::here() construit toujours des chemins relatifs à la racine du projet, là où se trouve le fichier .Rproj, quel que soit l’endroit du projet depuis lequel vous l’appelez.
# 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)Vérification rapide
Vous disposez de la chaîne de chemin 'data/raw/../clean/sales.csv'. Quelle fonction utiliseriez-vous pour la convertir en chemin absolu canonique propre ?
Chemins de fichiers — Points essentiels
Une gestion robuste des chemins de fichiers est indispensable pour créer des scripts R reproductibles :
getwd()/setwd()— obtenir et définir le répertoire de travailfile.path('a', 'b', 'c.csv')— construire un chemin compatible avec tous les systèmes d’exploitationnormalizePath(path, mustWork = FALSE)— convertir en chemin absoludirname()/basename()— séparer le chemin en dossier et fichierfile.exists()— vérifier avant la lectureSys.getenv('HOME')— accéder aux chemins système via les variables d’environnementpath.expand('~')— développer le tilde en répertoire personnellist.files(pattern = '\.csv$')— rechercher les fichiers par extensiondir.create(recursive = TRUE)— créer des dossiers imbriqués en toute sécurité- Utilisez le paquet here pour les chemins relatifs au projet dans les projets RStudio
# 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))Questions Fréquemment Posées
La leçon « Répertoires de travail et chemins de fichiers » est-elle gratuite ?
Oui — le texte complet de « Répertoires de travail et chemins de fichiers » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours R Academy, passe à CoddyKit PRO. Le cours R Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Répertoires de travail et chemins de fichiers » ?
Utilisez getwd(), setwd() et here() pour obtenir des chemins fiables sur toutes les plateformes. Tu pratiques R Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer R Academy ?
Aucune expérience préalable n'est requise. R Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Répertoires de travail et chemins de fichiers » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon R Academy ?
Oui. Chaque leçon R Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Utiliser source() pour charger des scripts
- Commentaires, style et lisibilité
- Répertoires de travail et chemins de fichiers
- Projets R et gestion de l’espace de travail