グローバルx<-2
環境に入れます:
x <-2
x
[1] 2
ローカルでa
別のものを定義して使用する関数にしましょう:x
get
a<-function(){
x<-1
get("x")
}
x
この関数は、ローカル環境から正しく取得します。
a()
[1] 1
次に、 withb
を使用する関数を以下のように定義しましょう。mapply
get
b<-function(){
x<-1
mapply(get,"x")
}
を呼び出すと、最初に関数環境を検索しないようb
です。代わりに、グローバル環境から直接取得しようとします。グローバル環境で定義されていない場合は、エラー メッセージが表示されます。mapply
get
x
x
b()
x
2
rm(x)
b()
Error in (function (x, pos = -1L, envir = as.environment(pos), mode = "any", :
object 'x' not found
これに対する解決策は、 を明示的に定義することenvir=environment()
です。
c<-function(){
x<-1
mapply(get,"x", MoreArgs = list(envir=environment()))
}
c()
x
1
しかし、ここで何が起こっているのか正確に知りたいです。何をしているのmapply
?(そして、なぜですか?これは予想される動作ですか?) この「落とし穴」は、他の R 関数で一般的ですか?