Directorios de trabajo y rutas de archivos
Use getwd(), setwd() y here() para obtener rutas fiables entre plataformas.
Directorios de trabajo y rutas de archivos es una lección gratuita de R Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de R Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de R Academy incluye 4 lecciones en total.
¿Qué es el directorio de trabajo?
El directorio de trabajo es la carpeta que R utiliza como punto de partida al hacer referencia a archivos mediante rutas relativas. Es la ubicación predeterminada que R consulta y en la que escribe cuando no se proporciona una ruta completa. Cada sesión de R tiene exactamente un directorio de trabajo en cada momento.
# 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(): cambiar el directorio de trabajo
setwd() cambia el directorio de trabajo de la sesión actual de R. Devuelve de forma invisible el directorio de trabajo anterior, lo que resulta útil para restaurar el estado. Nota: no se recomienda usar setwd() en scripts dentro de flujos de trabajo basados en proyectos.
# 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(): crear rutas portables
file.path() construye rutas de archivos uniendo componentes con el separador correcto para el sistema operativo (/ en Mac/Linux y \ en Windows). Úsela siempre en lugar de concatenar cadenas para garantizar la compatibilidad entre plataformas.
# 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(): resolver una ruta absoluta
normalizePath() convierte una ruta relativa en su forma absoluta canónica y resuelve los componentes . (directorio actual) y .. (directorio padre). Es esencial cuando necesita almacenar o registrar una ubicación de archivo inequívoca.
# 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() y basename()
dirname() extrae la parte correspondiente al directorio de una ruta, mientras que basename() extrae la parte correspondiente al nombre del archivo. Son los equivalentes en R de los comandos de shell de Unix dirname y 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(): comprobar antes de leer
Compruebe siempre si existe un archivo antes de intentar leerlo para evitar mensajes de error crípticos. file.exists() devuelve TRUE o FALSE y funciona tanto con archivos como con directorios.
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(): rutas en variables de entorno
Las variables de entorno almacenan rutas del sistema, como el directorio personal, la carpeta temporal y las rutas personalizadas de las aplicaciones. Sys.getenv() lee estos valores, lo que permite adaptar el código a distintos sistemas sin codificar las rutas directamente.
# 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(): expansión de la tilde
La tilde ~ es una abreviatura del directorio personal en los sistemas similares a Unix, pero las funciones de archivos de R no siempre la expanden automáticamente. path.expand() reemplaza ~ por la ruta real del directorio personal.
# 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')Listar archivos con list.files()
list.files() (con el alias dir()) muestra los archivos de un directorio, con la posibilidad de filtrarlos mediante un patrón y de devolver opcionalmente las rutas completas. Es indispensable cuando necesita procesar varios archivos de una carpeta.
# 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))Crear y eliminar rutas
R incluye funciones integradas para crear directorios y administrar archivos. Use dir.create() para crear carpetas nuevas, con recursive = TRUE para crear rutas anidadas, y file.remove() para eliminar archivos temporales.
# 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')
}Paquete here: rutas relativas al proyecto
El paquete here resuelve el problema del directorio de trabajo de forma elegante. here::here() siempre construye rutas relativas a la raíz del proyecto, donde se encuentra el archivo .Rproj, independientemente de desde qué ubicación del proyecto lo invoque.
# 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)Comprobación rápida
Tiene una cadena de ruta 'data/raw/../clean/sales.csv'. ¿Qué función utilizaría para resolverla en una ruta absoluta, canónica y limpia?
Rutas de archivos — conclusiones clave
Un manejo robusto de las rutas de archivos es esencial para crear scripts de R reproducibles:
getwd()/setwd()— obtener y establecer el directorio de trabajofile.path('a', 'b', 'c.csv')— construir rutas portables entre sistemas operativosnormalizePath(path, mustWork = FALSE)— resolver a una ruta absolutadirname()/basename()— dividir la ruta en carpeta y archivofile.exists()— comprobar que exista antes de leerloSys.getenv('HOME')— acceder a rutas del sistema mediante variables de entornopath.expand('~')— expandir la tilde al directorio de iniciolist.files(pattern = '\.csv$')— buscar archivos por extensióndir.create(recursive = TRUE)— crear directorios anidados de forma segura- Usar el paquete here para las rutas relativas al proyecto en proyectos de 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))Aprende R con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 43
- Lecciones
- 159
Preguntas frecuentes
¿La lección «Directorios de trabajo y rutas de archivos» es gratis?
Sí — el texto completo de «Directorios de trabajo y rutas de archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de R Academy, actualiza a CoddyKit PRO. El curso de R Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Directorios de trabajo y rutas de archivos»?
Use getwd(), setwd() y here() para obtener rutas fiables entre plataformas. Practicas R Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar R Academy?
No se requiere experiencia previa. R Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Directorios de trabajo y rutas de archivos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de R Academy?
Sí. Cada lección de R Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Uso de source() para cargar scripts
- Comentarios, estilo y legibilidad
- Directorios de trabajo y rutas de archivos
- Proyectos de R y gestión del espacio de trabajo