누군가가 간단한 예를 들어 이것을 설명 할 수 있다면 도움이 될까요?
또한 parent.frame()
대신 사용하는 것이 유용 parent.env()
하거나 그 반대의 경우도 마찬가지입니다.
답변
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 = new.env(parent=emptyenv())
보통 – 우회하기 심볼 룩업에 env[["x"]]
처음에 보이는 것 env
, 다음에서 env
의 부모 발견되지 않는 경우는. 마찬가지로, <<-
할당 외모는에서 시작 parent.env
. R의 비교적 새로운 참조 클래스 구현은 이러한 아이디어에 의존하여 심볼 (인스턴스 필드 및 메서드)을 찾을 수있는 인스턴스 별 환경을 정의합니다.