환경 생성 및 검사
환경을 다루기 위해 new.env(), environment(), ls(), get()을 사용합니다.
환경 생성 및 검사은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
새 환경 만들기
new.env(parent = e)는 새로운 빈 환경을 만듭니다. parent 인수는 새 환경에서 이름을 찾지 못했을 때 검색할 환경을 지정합니다. 완전히 독립된 환경을 만들려면 emptyenv()를 사용하십시오.
# 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() — 바인딩 추가하기
assign('name', value, envir = e)는 지정된 환경에서 이름이 지정된 바인딩을 만들거나 갱신합니다. e$name <- value와 같은 프로그래밍 방식의 할당이지만, 이름이 변수에 저장되어 있을 때도 사용할 수 있습니다.
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()과 mget()
get('name', envir = e)는 하나의 바인딩을 가져옵니다. mget(c('a','b'), envir = e)는 여러 바인딩을 한 번에 가져와 이름이 지정된 목록으로 반환합니다. 이름이 존재하지 않으면 두 함수 모두 오류를 발생시킵니다(inherits가 연결 검색을 허용하는 경우는 제외).
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() — 바인딩 나열하기
ls(envir = e)는 환경 e에 바인딩된 모든 이름을 character 벡터로 반환합니다. all.names = TRUE를 추가하면 기본적으로 숨겨지는 .으로 시작하는 이름도 포함됩니다. 이름은 알파벳순으로 반환됩니다.
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')inherits를 사용하는 exists()
exists('name', envir = e, inherits = FALSE)는 부모 환경이 아니라 지정된 환경만 확인합니다. inherits = TRUE(기본값)를 사용하면 부모 연결도 검색합니다. 엄격한 지역 확인에는 inherits = FALSE를 사용하십시오.
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()과 parent.env()
environmentName(e)는 기본 제공 환경의 이름('R_GlobalEnv', 'package:base' 등)을 반환합니다. 사용자가 만든 환경은 ''을 반환합니다. parent.env(e)는 부모 환경 객체를 반환합니다.
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')환경의 $ 구문
환경은 목록과 마찬가지로 바인딩을 읽고 쓰는 데 $ 및 [[ 구문을 지원합니다. 기록할 때 이름을 알고 있는 직접 접근에는 get()/assign()보다 이 방법이 더 편리한 경우가 많습니다.
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() 사용하기
rm('name', envir = e)는 특정 환경에서 바인딩을 제거합니다. 이는 전역 변수를 제거하는 것과 다릅니다. 사용자 지정 환경을 사용할 때는 환경을 명시적으로 지정해야 합니다.
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()
as.list(e)는 환경의 모든 바인딩을 이름이 지정된 목록으로 변환하므로 내용을 쉽게 확인하거나 직렬화할 수 있습니다. 결과는 스냅샷이므로 이후 환경이 변경되어도 목록에는 반영되지 않습니다.
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)해시 테이블로서의 환경
new.env()의 hash = TRUE 옵션(부모가 설정된 경우의 기본값)은 해시 기반 조회를 활성화하여 이름 조회를 O(1)로 만듭니다. 따라서 키-값 저장에서는 큰 환경이 목록보다 훨씬 빠릅니다.
# 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')환경 복사와 공유
환경을 새 변수에 할당해도 환경이 복사되지는 않습니다. 두 변수 모두 같은 객체를 참조합니다. 서로 독립적인 환경이 필요하다면 as.list()를 사용한 다음 list2env()를 사용하여 실제 복사본을 만드십시오.
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 999빠른 확인
부모 환경을 검색하지 않고 환경에 이름이 바인딩되어 있는지 확인하는 함수는 무엇입니까?
환경 생성: 핵심 정리
환경을 생성하고 검사할 때의 핵심 내용:
new.env(parent=e)는 비어 있는 새 환경을 생성합니다. 큰 저장소에는hash=TRUE를 사용합니다.assign('x', v, envir=e)와get('x', envir=e)를 사용하면 프로그래밍 방식으로 접근할 수 있습니다.e$x와e[['x']]는 목록 접근자처럼 작동합니다.ls(envir=e)는 이름을 나열하고,exists('x', envir=e, inherits=FALSE)는 엄격하게 확인합니다.as.list(e)는 목록으로 변환하고,list2env()는 환경을 재구성합니다.- 환경은 참조 객체이므로 할당하면 복사되지 않고 공유됩니다.
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')자주 묻는 질문
“환경 생성 및 검사” 강의는 무료인가요?
네 — “환경 생성 및 검사” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“환경 생성 및 검사”에서 뭘 배우나요?
환경을 다루기 위해 new.env(), environment(), ls(), get()을 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
R Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“환경 생성 및 검사” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- R의 환경이란 무엇인가요?
- 어휘적 스코프 규칙
- 전역 스코프와 지역 스코프
- 환경 생성 및 검사