0Pricing
R Academy · 강의

환경 생성 및 검사

환경을 다루기 위해 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. R의 환경이란 무엇인가요?
  2. 어휘적 스코프 규칙
  3. 전역 스코프와 지역 스코프
  4. 환경 생성 및 검사
← R Academy(으)로 돌아가기