R Academy · Aula

Diretórios de trabalho e caminhos de arquivos

Use getwd(), setwd() e here() para obter caminhos confiáveis entre plataformas.

Aula 3 de 413 etapas

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

setwd() — 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 automatically

file.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 trabalho
  • file.path('a', 'b', 'c.csv') — constroem caminhos portáveis entre sistemas operacionais
  • normalizePath(path, mustWork = FALSE) — resolvem o caminho para um formato absoluto
  • dirname() / basename() — separam o caminho em pasta e arquivo
  • file.exists() — verificam se o arquivo existe antes da leitura
  • Sys.getenv('HOME') — acessam caminhos do sistema por meio de variáveis de ambiente
  • path.expand('~') — expandem o til para o diretório pessoal
  • list.files(pattern = '\.csv$') — localizam arquivos pela extensão
  • dir.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))
Grátis para começar

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

  1. Usando source() para carregar scripts
  2. Comentários, estilo e legibilidade
  3. Diretórios de trabalho e caminhos de arquivos
  4. Projetos R e gerenciamento do espaço de trabalho
← Voltar para R Academy