22 setembro, 2021
# Criando o ambiente 'amb1' amb1 <- new.env() # Objeto x em 'amb1' amb1$x <- 1 # Objeto x no ambiente global x <- 2 # Criando a funcao 'h' em 'amb1' amb1$h <- function() x # chamando a funcao h() amb1$h() ## [1] 2 # vericando o id de memoria de amb1 amb1 # ou .Internal(address(amb1)) ## <environment: 0x00000000095f6730> # Ambiente envolvente de 'h' environment(amb1$h) ## <environment: R_GlobalEnv>
# Criando a funcao f1 f1 <- function() 1 # Verificando o ambiente envolvente de f1 environment(f1) ## <environment: R_GlobalEnv> # Criando uma funcao f f <- function() { # ambiente de execucao cat("Ambiente de execucao de f: \n") print(environment()) # Criando uma funcao f2 f2 <- function() 2 # Verificando o ambiente envolvente de f2 cat("Ambiente envolvente de f2:\n") print(environment(f2)) } f() ## Ambiente de execucao de f: ## <environment: 0x0000000007687688> ## Ambiente envolvente de f2: ## <environment: 0x0000000007687688>
# Fabrica de funcoes h <- function() { x <- 1 function() { amb_envolvente <- get("x", environment()) amb_chamada <- get("x", parent.frame()) list(envolvente = amb_envolvente, chamada = amb_chamada) } } # Funcao g g <- h() # Definindo 'x' no ambiente global x <- 20 # Chamada de g(), e verificando 'x' no ambiente de envolvente e de chamada g() ## $envolvente ## [1] 1 ## ## $chamada ## [1] 20