0Pricing
R Academy · Pelajaran

Apa Itu Environment dalam R?

Jelajahi environment sebagai daftar bernama dengan penunjuk ke induk.

Apa Itu Environment dalam R? adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 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 Environment?

Dalam R, environment adalah kumpulan pengikatan bernama (seperti daftar bernama) ditambah penunjuk ke parent environment. Setiap variabel berada dalam suatu environment. Saat R mencari sebuah nama, R terlebih dahulu mencarinya di environment saat ini, lalu menelusuri rantai induk ke atas.

# The global environment holds your session variables
x <- 42
cat('x is in globalenv:', exists('x', envir = globalenv()), '\n')
cat('globalenv name:', environmentName(globalenv()), '\n')

globalenv(), baseenv(), dan emptyenv()

R memiliki beberapa environment bawaan: globalenv() adalah ruang kerja interaktif Anda, baseenv() menyimpan fungsi dasar R, dan emptyenv() adalah puncak rantai yang tidak memiliki induk. Setiap rantai environment pada akhirnya berakhir di emptyenv().

cat('global    :', environmentName(globalenv()),  '\n')
cat('base      :', environmentName(baseenv()),    '\n')
cat('empty     :', environmentName(emptyenv()),   '\n')
cat('parent of global:', environmentName(parent.env(globalenv())), '\n')

Rantai Environment

Setiap environment memiliki tepat satu induk (kecuali emptyenv()). Saat R tidak dapat menemukan nama di environment saat ini, R berpindah ke induknya, lalu ke induk dari induk tersebut, dan seterusnya. Rantai inilah yang digunakan R untuk menemukan nama variabel.

# Walk the parent chain from globalenv
env <- globalenv()
for (i in 1:5) {
  cat(sprintf('Level %d: %s\n', i, environmentName(env)))
  if (identical(env, emptyenv())) break
  env <- parent.env(env)
}

environment() untuk Fungsi

Setiap fungsi memiliki environment terkait — yaitu environment tempat fungsi tersebut dibuat. environment(f) mengembalikan environment tersebut. Ini adalah enclosing environment fungsi dan menentukan tempat fungsi mencari variabel bebas.

f <- function() 'hello'
cat('f was defined in:', environmentName(environment(f)), '\n')

# Inside a function, environment() returns its own env
show_env <- function() {
  cat('my env:', environmentName(environment()), '\n')
}
show_env()

as.list() pada Environment

as.list(env) mengonversi pengikatan dalam environment menjadi daftar bernama, yang berguna untuk memeriksa isinya secara terprogram. Menggabungkannya dengan globalenv() akan menampilkan semua variabel sesi saat ini.

a <- 10
b <- 'hello'
c_val <- TRUE
# Show current global bindings as list
bindings <- as.list(globalenv())
cat('Names in globalenv:', paste(ls(globalenv()), collapse = ', '), '\n')

ls() — Daftar Isi Environment

ls() mencantumkan nama yang terikat dalam sebuah environment. Secara bawaan, fungsi ini menampilkan environment global. Berikan envir = e untuk memeriksa environment tertentu. Tambahkan all.names = TRUE untuk menyertakan nama yang diawali ..

my_env <- new.env(parent = emptyenv())
my_env$x <- 1
my_env$y <- 'two'
my_env$.hidden <- TRUE
cat('Default ls:', ls(envir = my_env), '\n')
cat('All names :', ls(envir = my_env, all.names = TRUE), '\n')

new.env() — Membuat Lingkungan

new.env(parent = e) membuat lingkungan kosong baru dengan induk yang diberikan. Gunakan emptyenv() sebagai induk jika Anda menginginkan lingkungan yang sepenuhnya terisolasi tanpa binding yang diwarisi.

e <- new.env(parent = emptyenv())
e$name  <- 'Alice'
e$score <- 95
cat('Names:', ls(e), '\n')
cat('Name binding:', e$name, '\n')

Lingkungan vs Daftar

Lingkungan terlihat seperti daftar bernama, tetapi perilakunya berbeda: lingkungan selalu diubah langsung (tanpa penyalinan saat diubah), memiliki induk, dan pencarian nama dilakukan melalui tabel hash (cepat). Daftar disalin saat diubah, sedangkan lingkungan tidak.

# Environments are reference objects (no copy-on-modify)
e <- new.env(parent = emptyenv())
e$x <- 1
f <- e        # f points to same env, not a copy
f$x <- 99
cat('e$x after modifying through f:', e$x, '\n')

exists() dan get() dalam Lingkungan

exists('name', envir = e) memeriksa apakah suatu nama memiliki binding dalam lingkungan (atau induknya secara bawaan). get('name', envir = e) mengambil nilainya. Keduanya menerima inherits = FALSE agar hanya mencari di lingkungan yang ditentukan.

e <- new.env(parent = emptyenv())
e$pi_approx <- 3.14159
cat('exists pi_approx:', exists('pi_approx', envir = e), '\n')
cat('exists missing:  ', exists('missing_var', envir = e), '\n')
cat('get pi_approx:   ', get('pi_approx', envir = e), '\n')

environmentName() untuk Lingkungan Bawaan

environmentName(env) mengembalikan nama yang mudah dibaca manusia untuk lingkungan khusus. Lingkungan yang dibuat pengguna mengembalikan '' (string kosong). Ini membantu Anda melacak tempat variabel didefinisikan saat melakukan penelusuran kesalahan.

cat(environmentName(globalenv()),    '\n')  # R_GlobalEnv
cat(environmentName(baseenv()),      '\n')  # package:base
cat(environmentName(emptyenv()),     '\n')  # R_EmptyEnv
e <- new.env(parent = emptyenv())
cat('User env name: "', environmentName(e), '"\n', sep = '')

Praktik: Menggunakan Lingkungan sebagai Tembolok

Karena lingkungan diubah langsung, lingkungan cocok digunakan sebagai tembolok yang dapat diubah atau peta hash. Simpan hasil perhitungan dalam suatu lingkungan agar Anda tidak perlu menghitungnya lagi — ini lebih cepat daripada mengubah daftar (yang akan disalin).

cache <- new.env(parent = emptyenv(), hash = TRUE)
cached_square <- function(n) {
  key <- as.character(n)
  if (exists(key, envir = cache, inherits = FALSE))
    return(get(key, envir = cache))
  result <- n^2
  assign(key, result, envir = cache)
  result
}
cat(cached_square(7), '\n')
cat(cached_square(7), '\n')  # served from cache

Pemeriksaan Singkat

Apa lingkungan paling atas dalam rantai lingkungan R — lingkungan yang tidak memiliki induk?

Lingkungan: Inti Pembelajaran

Inti pembelajaran tentang lingkungan R:

  • Lingkungan = binding bernama + penunjuk ke induk
  • globalenv() = ruang kerja Anda; baseenv() = R dasar; emptyenv() = ujung rantai
  • Pencarian nama bergerak naik melalui rantai induk hingga nama ditemukan atau mencapai emptyenv()
  • ls(envir=e) menampilkan binding; exists() memeriksa; get() mengambil nilai
  • Lingkungan adalah objek referensi — tidak disalin saat diubah
  • new.env(parent=emptyenv()) membuat lingkungan yang terisolasi
e <- new.env(parent = emptyenv())
assign('counter', 0L, envir = e)
for (i in 1:5) assign('counter', e$counter + 1L, envir = e)
cat('Counter:', e$counter, '\n')
cat('Env name:', environmentName(e), '\n')
cat('Bindings:', ls(e), '\n')

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Apa Itu Environment dalam R?” gratis?

Ya — teks lengkap “Apa Itu Environment dalam R?” 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 “Apa Itu Environment dalam R?”?

Jelajahi environment sebagai daftar bernama dengan penunjuk ke induk. 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 1 dari 4.

Berapa lama pelajaran “Apa Itu Environment dalam R?” 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

  1. Apa Itu Environment dalam R?
  2. Aturan Lingkup Leksikal
  3. Lingkup Global vs Lokal
  4. Membuat dan Memeriksa Environment
← Kembali ke R Academy