Ambientes em R, maplique e obtenha
Deixeix<-2
no ambiente global:
x <-2
x
[1] 2
Deixeia
ser uma função que define outrax
localmente e usaget
:
a<-function(){
x<-1
get("x")
}
Esta função obtém corretamentex
do ambiente local:
a()
[1] 1
Agora vamos definir uma funçãob
como abaixo, que usamapply
comget
:
b<-function(){
x<-1
mapply(get,"x")
}
Se eu ligarb
, parece quemapply
fazget
não procure primeiro o ambiente da função. Em vez disso, ele tenta obterx
formar diretamente o ambiente global e, sex
não está definido no ambiente global, ele fornece uma mensagem de erro:
b()
x
2
rm(x)
b()
Error in (function (x, pos = -1L, envir = as.environment(pos), mode = "any", :
object 'x' not found
A solução para isso é definir explicitamenteenvir=environment()
.
c<-function(){
x<-1
mapply(get,"x", MoreArgs = list(envir=environment()))
}
c()
x
1
Mas eu gostaria de saber o que exatamente está acontecendo aqui. O que émapply
fazendo? (E por quê? Esse é o comportamento esperado?) Essa "armadilha" é comum em outras funções R?