Diretórios de trabalho e caminhos de arquivos
Use getwd(), setwd() e here() para obter caminhos confiáveis entre plataformas.
Diretórios de trabalho e caminhos de arquivos é uma aula grátis de R Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.
O que é o diretório de trabalho?
O diretório de trabalho é a pasta que R usa como ponto de partida quando você faz referência a arquivos com caminhos relativos. É o local padrão que R consulta (e no qual grava) quando você não fornece um caminho completo. Cada sessão de R tem exatamente um diretório de trabalho por vez.
# 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() — alterando o diretório de trabalho
setwd() altera o diretório de trabalho da sessão atual de R. Ela retorna o diretório de trabalho anterior de forma invisível, o que é útil para restaurar o estado. Observação: não é recomendável usar setwd() em scripts em fluxos de trabalho baseados em projetos.
# 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() — criando caminhos portáteis
file.path() constrói caminhos de arquivos unindo componentes com o separador correto para o sistema operacional (/ no Mac/Linux, \ no Windows). Sempre use essa função em vez de concatenar strings para garantir compatibilidade 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() — convertendo para caminho absoluto
normalizePath() converte um caminho relativo para sua forma absoluta canônica, resolvendo os componentes . (diretório atual) e .. (diretório pai). Isso é essencial quando você precisa armazenar ou registrar um local de arquivo sem ambiguidade.
# 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() e basename()
dirname() extrai a parte do diretório de um caminho, e basename() extrai a parte correspondente ao nome do arquivo. Esses são os equivalentes em R dos comandos de shell Unix dirname e 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() — verificando antes de ler
Sempre verifique se um arquivo existe antes de tentar lê-lo, para evitar mensagens de erro crípticas. file.exists() retorna TRUE ou FALSE e funciona tanto com arquivos quanto com diretórios.
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() — caminhos em variáveis de ambiente
As variáveis de ambiente armazenam caminhos no nível do sistema, como o diretório pessoal, a pasta temporária e caminhos personalizados de aplicativos. Sys.getenv() lê esses valores, tornando seu código adaptável a diferentes sistemas sem caminhos codificados diretamente.
# 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() — expansão do til
O til ~ é uma abreviação do diretório pessoal em sistemas semelhantes ao Unix, mas as funções de arquivo do R nem sempre o expandem automaticamente. path.expand() substitui ~ pelo caminho real do diretório pessoal.
# 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')Listando arquivos com list.files()
list.files() (alias dir()) lista os arquivos de um diretório, com a opção de filtrá-los por um padrão e de retornar os caminhos completos. Essa função é indispensável quando você precisa processar vários arquivos em uma pasta.
# 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))Criando e removendo caminhos
R tem funções integradas para criar diretórios e gerenciar arquivos. Use dir.create() para criar novas pastas (com recursive = TRUE para criar caminhos aninhados) e file.remove() para remover arquivos temporários.
# 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')
}Pacote here — caminhos relativos ao projeto
O pacote here resolve o problema do diretório de trabalho de forma elegante. here::here() sempre constrói caminhos relativos à raiz do projeto (onde está o arquivo .Rproj), independentemente do local do projeto a partir do qual você o chama.
# 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)Verificação rápida
Você tem uma cadeia de caracteres de caminho 'data/raw/../clean/sales.csv'. Qual função você usaria para resolver isso em um caminho absoluto, limpo e canônico?
Caminhos de arquivos — principais conclusões
O tratamento robusto de caminhos de arquivos é essencial para scripts R reproduzíveis:
getwd()/setwd()— obtêm e definem o diretório de trabalhofile.path('a', 'b', 'c.csv')— constroem caminhos portáveis entre sistemas operacionaisnormalizePath(path, mustWork = FALSE)— resolvem o caminho para um formato absolutodirname()/basename()— separam o caminho em pasta e arquivofile.exists()— verificam se o arquivo existe antes da leituraSys.getenv('HOME')— acessam caminhos do sistema por meio de variáveis de ambientepath.expand('~')— expandem o til para o diretório pessoallist.files(pattern = '\.csv$')— localizam arquivos pela extensãodir.create(recursive = TRUE)— criam pastas aninhadas com segurança- Use o pacote here para caminhos relativos ao projeto em projetos do 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))Aprenda R com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 43
- Aulas
- 159
Perguntas Frequentes
A aula “Diretórios de trabalho e caminhos de arquivos” é grátis?
Sim — o texto completo de “Diretórios de trabalho e caminhos de arquivos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.
O que vou aprender em “Diretórios de trabalho e caminhos de arquivos”?
Use getwd(), setwd() e here() para obter caminhos confiáveis entre plataformas. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar R Academy?
Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Diretórios de trabalho e caminhos de arquivos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de R Academy?
Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Usando source() para carregar scripts
- Comentários, estilo e legibilidade
- Diretórios de trabalho e caminhos de arquivos
- Projetos R e gerenciamento do espaço de trabalho