Membuat dan Memeriksa Environment
Gunakan new.env(), environment(), ls(), dan get() untuk bekerja dengan environment.
Membuat dan Memeriksa Environment adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Membuat Lingkungan Baru
new.env(parent = e) membuat lingkungan kosong baru. Argumen parent menentukan lingkungan yang dicari ketika nama tidak ditemukan di lingkungan baru. Gunakan emptyenv() untuk lingkungan yang sepenuhnya terisolasi.
# Isolated environment (no parent chain)
e1 <- new.env(parent = emptyenv())
# Environment with global as parent
e2 <- new.env(parent = globalenv())
cat('e1 parent:', environmentName(parent.env(e1)), '\n')
cat('e2 parent:', environmentName(parent.env(e2)), '\n')assign() — Menambahkan Binding
assign('name', value, envir = e) membuat atau memperbarui binding bernama di lingkungan yang ditentukan. Ini merupakan padanan terprogram dari e$name <- value, tetapi dapat digunakan ketika nama disimpan dalam variabel.
e <- new.env(parent = emptyenv())
assign('x', 10, envir = e)
assign('y', 'hello', envir = e)
assign('z', TRUE, envir = e)
cat('x:', get('x', envir = e), '\n')
cat('y:', get('y', envir = e), '\n')get() dan mget()
get('name', envir = e) mengambil satu binding. mget(c('a','b'), envir = e) mengambil beberapa binding sekaligus dan mengembalikan daftar bernama. Keduanya menghasilkan kesalahan jika nama tidak ada (kecuali inherits mengizinkan pencarian di sepanjang rantai).
e <- new.env(parent = emptyenv())
e$alpha <- 1
e$beta <- 2
e$gamma <- 3
# Single
get('alpha', envir = e)
# Multiple
mget(c('alpha', 'beta', 'gamma'), envir = e)ls() — Menampilkan Binding
ls(envir = e) mengembalikan vektor character yang berisi semua nama yang memiliki binding di lingkungan e. Tambahkan all.names = TRUE untuk menyertakan nama yang diawali . (secara bawaan disembunyikan). Nama-nama tersebut dikembalikan dalam urutan alfabetis.
e <- new.env(parent = emptyenv())
e$b_val <- 2
e$a_val <- 1
e$.secret <- 'hidden'
cat('Default ls:', ls(envir = e), '\n')
cat('All names :', ls(envir = e, all.names = TRUE), '\n')exists() dengan inherits
exists('name', envir = e, inherits = FALSE) hanya memeriksa lingkungan yang ditentukan, bukan induknya. Dengan inherits = TRUE (bawaan), fungsi ini juga mencari di sepanjang rantai induk. Gunakan inherits = FALSE untuk pemeriksaan lokal yang ketat.
parent_e <- new.env(parent = emptyenv())
parent_e$shared <- 42
child_e <- new.env(parent = parent_e)
# inherits=TRUE: finds shared in parent
cat('inherits TRUE:', exists('shared', envir = child_e, inherits = TRUE), '\n')
# inherits=FALSE: only looks in child
cat('inherits FALSE:', exists('shared', envir = child_e, inherits = FALSE), '\n')environmentName() dan parent.env()
environmentName(e) mengembalikan nama lingkungan bawaan ('R_GlobalEnv', 'package:base', dan sebagainya). Lingkungan yang dibuat pengguna mengembalikan ''. parent.env(e) mengembalikan objek lingkungan induk.
e <- new.env(parent = globalenv())
cat('Name of e :', environmentName(e), '\n')
cat('Parent of e :', environmentName(parent.env(e)), '\n')
cat('Name of global:', environmentName(globalenv()), '\n')Sintaks $ untuk Lingkungan
Lingkungan mendukung sintaks $ dan [[ seperti daftar untuk membaca dan menulis binding. Ini sering lebih praktis daripada get()/assign() untuk akses langsung ketika nama sudah diketahui saat penulisan.
e <- new.env(parent = emptyenv())
e$pi_approx <- 3.14159
e[['e_approx']] <- 2.71828
cat('pi:', e$pi_approx, '\n')
cat('e :', e[['e_approx']], '\n')rm() dalam Lingkungan Tertentu
rm('name', envir = e) menghapus binding dari lingkungan tertentu. Ini berbeda dari menghapus variabel global — Anda harus menentukan lingkungan secara eksplisit saat bekerja dengan lingkungan khusus.
e <- new.env(parent = emptyenv())
e$keep <- 1
e$remove_me <- 99
cat('Before:', ls(envir = e), '\n')
rm('remove_me', envir = e)
cat('After :', ls(envir = e), '\n')as.list() untuk Menyalin Isi Lingkungan
as.list(e) mengonversi semua binding dalam lingkungan menjadi daftar bernama, sehingga isinya mudah diperiksa atau diserialisasi. Hasilnya merupakan cuplikan — perubahan berikutnya pada lingkungan tidak tercermin dalam daftar tersebut.
e <- new.env(parent = emptyenv())
e$x <- 10
e$y <- 20
e$z <- 30
bindings <- as.list(e)
cat('Class:', class(bindings), '\n')
cat('Length:', length(bindings), '\n')
str(bindings)Lingkungan sebagai Tabel Hash
Opsi hash = TRUE dalam new.env() (bawaan ketika induk ditetapkan) mengaktifkan pencarian berbasis hash, sehingga pencarian nama memiliki kompleksitas O(1). Hal ini membuat lingkungan besar jauh lebih cepat daripada daftar untuk penyimpanan pasangan kunci-nilai.
# Build a small key-value store
store <- new.env(hash = TRUE, parent = emptyenv())
keys <- paste0('key_', 1:5)
values <- c(10, 20, 30, 40, 50)
for (i in seq_along(keys)) assign(keys[i], values[i], envir = store)
# Retrieve
cat('key_3 =', get('key_3', envir = store), '\n')
cat('All keys:', ls(store), '\n')Menyalin vs Berbagi Lingkungan
Menetapkan suatu lingkungan ke variabel baru tidak akan menyalinnya—kedua variabel merujuk ke objek yang sama. Gunakan as.list() lalu list2env() untuk membuat salinan yang benar-benar terpisah jika Anda memerlukan lingkungan independen.
e1 <- new.env(parent = emptyenv())
e1$val <- 100
e2 <- e1 # reference, not a copy
e2$val <- 999
cat('e1$val:', e1$val, '\n') # 999, modified via e2!
# True copy:
e3 <- list2env(as.list(e1), parent = emptyenv())
e3$val <- 0
cat('e1$val after e3 change:', e1$val, '\n') # still 999Pemeriksaan Singkat
Fungsi mana yang memeriksa apakah suatu nama terikat dalam lingkungan tanpa mencari di lingkungan induknya?
Inti Pembuatan Lingkungan
Hal-hal penting untuk membuat dan memeriksa lingkungan:
new.env(parent=e)membuat lingkungan kosong baru; gunakanhash=TRUEuntuk penyimpanan berukuran besarassign('x', v, envir=e)danget('x', envir=e)untuk akses secara terprograme$xdane[['x']]berfungsi seperti pengakses daftarls(envir=e)menampilkan nama; gunakanexists('x', envir=e, inherits=FALSE)untuk pemeriksaan ketatas.list(e)mengubahnya menjadi daftar;list2env()merekonstruksinya- Lingkungan adalah objek referensi—penetapan akan berbagi, bukan menyalin
config <- new.env(hash = TRUE, parent = emptyenv())
assign('host', 'localhost', envir = config)
assign('port', 5432L, envir = config)
assign('db', 'mydb', envir = config)
cat('Keys :', ls(config), '\n')
cat('host :', config$host, '\n')
cat('port :', config$port, '\n')Belajar R dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 43
- Pelajaran
- 159
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat dan Memeriksa Environment” gratis?
Ya — teks lengkap “Membuat dan Memeriksa Environment” 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 “Membuat dan Memeriksa Environment”?
Gunakan new.env(), environment(), ls(), dan get() untuk bekerja dengan environment. 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 4 dari 4.
Berapa lama pelajaran “Membuat dan Memeriksa Environment” 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
- Apa Itu Environment dalam R?
- Aturan Lingkup Leksikal
- Lingkup Global vs Lokal
- Membuat dan Memeriksa Environment