2

グローバルx<-2環境に入れます:

x <-2 
x
[1] 2

ローカルでa別のものを定義して使用する関数にしましょう:xget

a<-function(){
  x<-1
  get("x")
}

xこの関数は、ローカル環境から正しく取得します。

a()
[1] 1

次に、 withbを使用する関数を以下のように定義しましょう。mapplyget

b<-function(){
  x<-1
  mapply(get,"x")
}

を呼び出すと、最初に関数環境を検索しないようbです。代わりに、グローバル環境から直接取得しようとします。グローバル環境で定義されていない場合は、エラー メッセージが表示されます。mapplygetxx

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 関数で一般的ですか?

4

3 に答える 3