2011-12-15 16 views
3

私の質問は次のとおりです。与えられた関数:関数が返すオブジェクトの名前を見つける

spam <- function() { 
    cat("eggs\n") 
} 

bla <- spam() 

関数がその内容を返すオブジェクトの名前を探したいと思います。例bla <- spam()の場合、これはblaになります。 match.callを使用して、私が行ったの呼び出しを見つけることができます。この

match.call() 
function() { 
     cat("eggs\n") 
    } 

を、しかし、関数はに戻ったオブジェクトの名前が含まれていません。私はRのヘルプのリスト、GoogleとSOの周りを見てきましたが、何か有用なものを見つけることができませんでした。どんな提案を進めるか?

背景 私が欲しいのは、欲求不満の側に少しです。私はどこから来ているのか説明していますが、これは私の動機を明らかにするかもしれません。私が取り組んでいるコンテキストは、テストと関連しており、具体的には、特定のオブジェクトが時間的に変化するかどうかをテストすることです(モデル出力など)。

通常、ユーザーは、オブジェクトを生成し、保存し、保存されたオブジェクトを時間の経過とともに新しく生成されたオブジェクトと比較する一連のコードを作成します。ユーザーは次の関数を使用してこれを行うことができます。

通常、この関数は参照を読み取り、ユーザーが互いに比較できる新しいオブジェクトを生成します。参照ファイルを再生成するために、まったく同じコードを使用したかったのです。グローバルオプション(optionsgetOptionを参照)、recalculateを変更してこれを行います。再計算モードでこの関数を実行すると、新しい参照が保存されます。そして、今私の質問に理由があります。 (save()を使用して)ファイルへの参照を保存する際に、ユーザーが返すオブジェクトの名前を日付と組み合わせて使用​​して一意の名前を作成したかったのです。

+2

'spam'は、それが割り当てされる場所の知識を持たないし、でもそのに与えられます(将来の)名前を「見る」ことができません結果。名前の割り当ては '< - 'によって行われています。 –

答えて

3

...私はあなたがこれを望む理由を想像するのが難しいと感じます。また、あなたのspam関数がNULLを返すので、それはそれにもかかわらず...

をさらに無意味と思われる、これを実行するための最も簡単な/クリーンな方法はspam関数に名前を渡すことです!

spam <- function(name) { 
    cat(name, "<- eggs\n") 
    42 # return a value 
} 


bla <- spam("bla") 

次のレベルに進むには、spamに割り当てを行うことができます。また、引用符なしの名前を指定できるようにsubstituteで遊ぶことができます:

spam <- function(name) { 
    name <- as.character(substitute(name)) 
    cat(name, "<- eggs\n") 
    value <- 42 
    assign(name, value, parent.frame()) 
} 

spam(bla) 
bla # 42 
+0

ご意見ありがとうございます。私はこのように行く良い理由があり、戻り値は私の質問にとって重要ではないので、この関数はNULLを返します。 –

+0

私はあなたのより単純な解決策に傾いています、もう一度ありがとうございます。私はちょうど私がそれをこのように解決できるかどうかと思っていた:)。 –

+0

「正当な理由」は一見秘密ですか? :) – Tommy

関連する問題