Çalışma Dizinleri ve Dosya Yolları
Güvenilir platformlar arası yollar için getwd(), setwd() ve here() kullanın.
Çalışma Dizinleri ve Dosya Yolları, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
Çalışma Dizini Nedir?
Çalışma dizini, göreli yollarla dosyalara başvurduğunuzda R'nin başlangıç noktası olarak kullandığı klasördür. Tam bir yol sağlamadığınızda R'nin baktığı (ve yazdığı) varsayılan konumdur. Her R oturumunun herhangi bir anda tam olarak bir çalışma dizini vardır.
# 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() — Çalışma Dizinini Değiştirme
setwd(), geçerli R oturumu için çalışma dizinini değiştirir. Önceki çalışma dizinini görünmez biçimde döndürür; bu, durumu geri yüklemek için yararlıdır. Not: Proje tabanlı iş akışlarında betiklerde setwd() kullanılması önerilmez.
# 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() — Taşınabilir Yollar Oluşturma
file.path(), bileşenleri işletim sistemi için doğru ayırıcıyla birleştirerek dosya yolları oluşturur (Mac/Linux'ta /, Windows'ta \). Platformlar arası uyumluluk için dize birleştirme yerine her zaman bunu kullanın.
# 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() — Mutlak Yola Çözümleme
normalizePath(), . (geçerli dizin) ve .. (üst dizin) bileşenlerini çözümleyerek göreli yolu kurallı mutlak biçimine dönüştürür. Belirsizliği olmayan bir dosya konumunu depolamanız veya günlüğe kaydetmeniz gerektiğinde bu çok önemlidir.
# 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() ve basename()
dirname() bir yolun dizin bölümünü, basename() ise dosya adı bölümünü çıkarır. Bunlar Unix dirname ve basename kabuk komutlarının R'deki karşılıklarıdır.
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() — Okumadan Önce Denetleme
Belirsiz hata iletilerinden kaçınmak için okumaya çalışmadan önce her zaman bir dosyanın var olup olmadığını denetleyin. file.exists(), TRUE veya FALSE döndürür ve hem dosyalarla hem de dizinlerle çalışır.
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() — Ortam Değişkeni Yolları
Ortam değişkenleri ev dizini, geçici klasör ve özel uygulama yolları gibi sistem düzeyindeki yolları depolar. Sys.getenv() bu değerleri okuyarak yolları sabit kodlamadan kodunuzu farklı sistemlere uyarlamanızı sağlar.
# 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 Genişletme
Tilde işareti ~, Unix benzeri sistemlerde ev dizininin kısaltmasıdır; ancak R'nin dosya işlevleri bunu her zaman otomatik olarak genişletmez. path.expand(), ~ işaretini gerçek ev dizini yoluyla değiştirir.
# 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')list.files() ile Dosyaları Listeleme
list.files() (diğer adı dir()) bir dizindeki dosyaları listeler; isteğe bağlı olarak bir kalıba göre filtreleyebilir ve tam yolları döndürebilir. Bir klasördeki birden fazla dosyayı işlemeniz gerektiğinde vazgeçilmezdir.
# 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))Yollar Oluşturma ve Kaldırma
R, dizinler oluşturmak ve dosyaları yönetmek için yerleşik işlevlere sahiptir. Yeni klasörler oluşturmak için dir.create() kullanın (recursive = TRUE ile iç içe yollar oluşturabilirsiniz); geçici dosyaları temizlemek için file.remove() kullanın.
# 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')
}here Paketi — Projeye Göreli Yollar
here paketi, çalışma dizini sorununu zarif bir şekilde çözer. here::here(), projede nereden çağırdığınızdan bağımsız olarak yolları her zaman proje köküne göre oluşturur (.Rproj dosyasının bulunduğu yer).
# 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)Hızlı Kontrol
'data/raw/../clean/sales.csv' yol dizesini temiz ve kurallı bir mutlak yola dönüştürmek için hangi işlevi kullanırsınız?
Dosya Yolları — Önemli Noktalar
Sağlam dosya yolu işleme, yeniden üretilebilir R betikleri için gereklidir:
getwd()/setwd()— çalışma dizinini alır ve ayarlarfile.path('a', 'b', 'c.csv')— işletim sistemleri arasında taşınabilir yol oluşturmanormalizePath(path, mustWork = FALSE)— mutlak yola dönüştürürdirname()/basename()— yolu klasör ve dosya olarak ayırırfile.exists()— okumadan önce dosyanın varlığını denetlerSys.getenv('HOME')— ortam değişkenleri aracılığıyla sistem yollarına erişirpath.expand('~')— yaklaşık işaretini giriş dizinine genişletirlist.files(pattern = '\.csv$')— uzantıya göre dosyaları bulurdir.create(recursive = TRUE)— iç içe klasörleri güvenli biçimde oluşturur- RStudio projelerinde proje göreli yollar için here paketini kullanın
# 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))Sıkça Sorulan Sorular
“Çalışma Dizinleri ve Dosya Yolları” dersi ücretsiz mi?
Evet — “Çalışma Dizinleri ve Dosya Yolları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“Çalışma Dizinleri ve Dosya Yolları” dersinde ne öğreneceğim?
Güvenilir platformlar arası yollar için getwd(), setwd() ve here() kullanın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Çalışma Dizinleri ve Dosya Yolları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Betikleri Yüklemek için source() Kullanımı
- Açıklamalar, Stil ve Okunabilirlik
- Çalışma Dizinleri ve Dosya Yolları
- R Projeleri ve Çalışma Alanı Yönetimi