2011-09-16 4 views

답변

88

parent.env은 클로저 (예 : 함수)가 정의 된 환경입니다. parent.frame은 클로저가 호출 된 환경입니다.

f = function() 
    c(f=environment(), defined_in=parent.env(environment()), 
     called_from=parent.frame()) 
g = function() 
    c(g=environment(), f()) 

다음

> g() 
$g 
<environment: 0x14060e8> 

$f 
<environment: 0x1405f28> 

$defined_in 
<environment: R_GlobalEnv> 

$called_from 
<environment: 0x14060e8> 

나는 단순한 인간이 이제까지 정말 그들을 사용하고 싶을 때 잘 모르겠지만, 개념은 여기 어휘 범위

> f = function() x 
> g = function() { x = 2; f() } 
> h = function() { x = 3; function() x } 
> x = 1 
> f() 
[1] 1 
> g() 
[1] 1 
> h()() 
[1] 3 

을 이해하는데 유용 또는 R에 소개의 수수께끼 같은 '은행 계좌'의 예에서 볼 수 있습니다. ?parent.frame의 세부 정보 섹션의 첫 번째 단락이 사물을 분명히 할 수 있습니다.

환경은 R로 보급되어 있습니다 (예 : search() 경로는 형제 - 부모 관계로 함께 연결된 (대략적으로) 환경입니다. 가끔 env[["x"]]env을 먼저 찾은 다음 찾지 못하면 env의 부모를 찾게됩니다. 기호 찾아보기를 우회하기 위해 env = new.env(parent=emptyenv())이 표시되는 경우가 있습니다. 마찬가지로 <<-parent.env에서 시작하는 배정을 찾습니다. R에서 비교적 새로운 참조 클래스 구현은 이러한 아이디어를 기반으로 심볼 (인스턴스 필드 및 메소드)을 찾을 수있는 인스턴스 별 환경을 정의합니다.