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 émapplyfazendo? (E por quê? Esse é o comportamento esperado?) Essa "armadilha" é comum em outras funções R?

questionAnswers(3)

yourAnswerToTheQuestion