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