2017-05-17 10 views
2

関数が複数の名前(それぞれ異なるバインディング環境にある)にバインドされているとします。これらの名前(もしあれば)のどれがそれを呼び出すのに使われたのかを知る方法はありますか?(名前付き)関数は、呼び出された名前を調べることができますか?

簡単な例:機能上の最初の呼び出しで

original.name <- function() cat("don't know my name (yet)...\n") 
call.thunk <- function (thunk) thunk() 
foo <- original.name 

foo() 
## don't know my name (yet)... 
call.thunk(original.name) 
## don't know my name (yet)... 

は名前fooと呼ばれます。 2つ目はthunkという名前で呼び出されます。この情報を確認できるように関数の本体を変更できますか?


(。この質問は、Rでのイントロスペクションについての詳細を学びたいが動機とされ、私は、任意の特定の問題を解決しようとしていないよ)

+2

として働くだろう。 –

答えて

6

sys.callをお試しください:

g <- f <- function() sys.call()[[1]] 
f() 
## f 

。なお、 :

  • これは、クラス"name"のオブジェクトを返します。文字列として名前を取得するには、as.character(sys.call()[[1]])を使用します。

  • match.call()[[1]]も身体あなたはそれが簡単に人々はあなたが望むものを理解できるようにするため、およびソリューションを提供します記述する環境を設定し、いくつかのサンプルコードを追加

関連する問題