2017-09-12 4 views
2

후 내가 원하는 작동하지 않습니다기능이 오류에 도움이 지원군을 호출하는 변화 환경

먼저 내 환경을 만들어 :

envizito <- new.env(parent = emptyenv()) 
attr(envizito, "name") <- "envizito" 

및라는 새로운 변수를 할당 aaa :

FUNn <- function() {print(envizito$aaa)} 

environment(FUNn) 
# <environment: R_GlobalEnv> 
:
envizito$aaa <- 12 

내가 함수를 생성

그럼, envizito에있을 환경을 변경 :

environment(FUNn) <- envizito 

environment(FUNn) 
# <environment: 0xc20b0a8> 
#attr(,"name") 
#[1] "envizito" 

그러나 전화 FUNn() 후 아래의 오류 보여 :

FUNn() 
# Error in { : could not find function "{" 

PS : environment(FUNn) 포인트 비록 메모리에 같은 장소에 그것을 내가 불렀을 때 나타나지 않았다. ls()

ls(envir = envizito, all.names = TRUE) 
# [1] "aaa" 

모든 조언과 제안을 부탁드립니다! 관심을 가져 주셔서 감사합니다.

답변

5

{ R이 객체가 아닌 다른 모든 것과 마찬가지로 함수입니다. envizito을 만들 때 빈 환경을 부모로 지정했습니다. 빈 상태 (empty)의 환경에서는, 이름의 힌트로서 객체를 포함하지 않습니다. 즉, 하늘입니다.

FUNn의 환경을 envisito으로 변경하면 상위 환경이 빈 환경이됩니다. FUNn (함수 정의가 전역 환경에 있음)을 호출하면 해당 환경 (즉, envisito)에서 함수 { (첫 번째 함수는 FUNn)을 검색합니다. envisito 안에 {을 찾을 수 없으므로 하나의 환경을 보입니다. 그러나 해당 환경은 비어있는 empty environment입니다. 따라서 함수가 {을 찾을 수 없다는 오류로 실패합니다.

+0

이 예제를 다시 실행하여 parent.frame() (즉, R_GlobalEnv)을 부모로 지정하면 모든 것이 정상적으로 작동합니다. 빈 환경을 일부 기능의 부모로 지정하여이 동작을 알지 못했습니다. 도와 줘서 고마워! – Facottons

+1

대단히 환영합니다. 도와 줄 수있어서 기뻐! – LyzandeR