간단한 예를 들어 설명하면 도움이 될 것입니다.R의 parent.frame()과 parent.env()의 차이점은 무엇입니까? 그들이 참조로 전화가 어떻게 다른가요?
또한 parent.env()
대신 parent.frame()
을 사용하는 것이 유용 할 수 있으며 그 반대의 경우도 마찬가지입니다.
간단한 예를 들어 설명하면 도움이 될 것입니다.R의 parent.frame()과 parent.env()의 차이점은 무엇입니까? 그들이 참조로 전화가 어떻게 다른가요?
또한 parent.env()
대신 parent.frame()
을 사용하는 것이 유용 할 수 있으며 그 반대의 경우도 마찬가지입니다.
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에서 비교적 새로운 참조 클래스 구현은 이러한 아이디어를 기반으로 심볼 (인스턴스 필드 및 메소드)을 찾을 수있는 인스턴스 별 환경을 정의합니다.