Direktori Kerja dan Jalur File
Gunakan getwd(), setwd(), dan here() untuk jalur lintas platform yang andal.
Direktori Kerja dan Jalur File adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu Direktori Kerja?
Direktori kerja adalah folder yang digunakan R sebagai titik awal ketika Anda merujuk file dengan jalur relatif. Direktori ini merupakan lokasi bawaan yang digunakan R untuk mencari dan menulis file ketika Anda tidak memberikan jalur lengkap. Setiap sesi R memiliki tepat satu direktori kerja pada suatu waktu.
# 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() — Mengubah Direktori Kerja
setwd() mengubah direktori kerja untuk sesi R saat ini. Fungsi ini secara tidak terlihat mengembalikan direktori kerja sebelumnya, yang berguna untuk memulihkan keadaan. Catatan: penggunaan setwd() dalam skrip tidak dianjurkan dalam alur kerja berbasis proyek.
# 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() — Membuat Jalur Portabel
file.path() membuat jalur file dengan menggabungkan komponen menggunakan pemisah yang sesuai untuk sistem operasi (/ di Mac/Linux, \ di Windows). Selalu gunakan fungsi ini, bukan penggabungan string, untuk kompatibilitas lintas platform.
# 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() — Mengubah Menjadi Jalur Absolut
normalizePath() mengubah jalur relatif menjadi bentuk absolut kanonisnya dengan menyelesaikan komponen . (direktori saat ini) dan .. (direktori induk). Ini penting ketika Anda perlu menyimpan atau mencatat lokasi file yang tidak ambigu.
# 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() dan basename()
dirname() mengambil bagian direktori dari suatu jalur, sedangkan basename() mengambil bagian nama file. Keduanya adalah padanan R untuk perintah shell Unix dirname dan 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() — Memeriksa Sebelum Membaca
Selalu periksa apakah sebuah file ada sebelum mencoba membacanya untuk menghindari pesan kesalahan yang sulit dipahami. file.exists() mengembalikan TRUE atau FALSE dan dapat digunakan pada file maupun direktori.
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() — Jalur dari Variabel Lingkungan
Variabel lingkungan menyimpan jalur tingkat sistem seperti direktori beranda, folder sementara, dan jalur aplikasi khusus. Sys.getenv() membaca nilai-nilai ini, sehingga kode Anda dapat menyesuaikan diri dengan berbagai sistem tanpa menuliskan jalur secara tetap.
# 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() — Ekspansi Tilde
Tilde ~ adalah singkatan untuk direktori beranda pada sistem mirip Unix, tetapi fungsi file R tidak selalu mengembangkannya secara otomatis. path.expand() mengganti ~ dengan jalur direktori beranda yang sebenarnya.
# 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')Menampilkan File dengan list.files()
list.files() (alias dir()) menampilkan file dalam suatu direktori, dengan opsi penyaringan berdasarkan pola dan pengembalian jalur lengkap. Fungsi ini sangat penting ketika Anda perlu memproses beberapa file dalam sebuah folder.
# 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))Membuat dan Menghapus Jalur
R memiliki fungsi bawaan untuk membuat direktori dan mengelola file. Gunakan dir.create() untuk membuat folder baru (dengan recursive = TRUE untuk membuat jalur bertingkat), dan file.remove() untuk membersihkan file sementara.
# 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')
}Paket here — Jalur Relatif terhadap Proyek
Paket here menyelesaikan masalah direktori kerja dengan elegan. here::here() selalu membuat jalur relatif terhadap akar proyek, tempat file .Rproj berada, di mana pun dalam proyek Anda memanggilnya.
# 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)Pemeriksaan Singkat
Anda memiliki string jalur 'data/raw/../clean/sales.csv'. Fungsi apa yang akan Anda gunakan untuk mengubahnya menjadi jalur absolut yang bersih dan kanonis?
Jalur File — Inti Pembelajaran
Penanganan jalur file yang tangguh sangat penting untuk skrip R yang dapat direproduksi:
getwd()/setwd()— mendapatkan dan menetapkan direktori kerjafile.path('a', 'b', 'c.csv')— membuat jalur yang portabel di berbagai OSnormalizePath(path, mustWork = FALSE)— mengubahnya menjadi jalur absolutdirname()/basename()— memisahkan jalur menjadi folder dan filefile.exists()— memeriksa sebelum membacaSys.getenv('HOME')— mengakses jalur sistem melalui variabel lingkunganpath.expand('~')— memperluas tilde menjadi direktori berandalist.files(pattern = '\.csv$')— menemukan file berdasarkan ekstensidir.create(recursive = TRUE)— membuat direktori bertingkat dengan aman- Gunakan paket here untuk jalur relatif terhadap proyek dalam proyek 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))Pertanyaan yang Sering Diajukan
Apakah pelajaran “Direktori Kerja dan Jalur File” gratis?
Ya — teks lengkap “Direktori Kerja dan Jalur File” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Direktori Kerja dan Jalur File”?
Gunakan getwd(), setwd(), dan here() untuk jalur lintas platform yang andal. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Direktori Kerja dan Jalur File” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menggunakan source() untuk Memuat Skrip
- Komentar, Gaya, dan Keterbacaan
- Direktori Kerja dan Jalur File
- Proyek R dan Pengelolaan Ruang Kerja