4

R 関数をデバッグしようとしているときに、次のことを思いつきました:
呼び出された関数のローカル変数を呼び出し元の環境にオプションでバインドする方法はありますか?

例えば

testFunction <- function(x=1,y=2){
  localVar1 <- x + 2
  localVar2 <- x + y
  sum(x,y)
}

sumXY <- testFunction()
if(exists("localVar1") && exists("localVar2")){
    print("test passed")
}

<<-この機能はインタラクティブなデバッグにのみ使用され、オペレーターは私のスクリプトには適していないことに注意してください。編集1:これを使用して分析コードをテスト/デバッグしているため、関数を変更しないソリューションを探しています。

4

1 に答える 1

5

呼び出しの評価フレームを終了する直前にtrace()保存する呼び出しを確立するために使用できます。testFunction()

TraceEnv次に、その環境が終了する直前の評価フレーム (ここでは object に割り当てられている) の内容を調べることができます。

testFunction <- function(x=1,y=2){
  localVar1 <- x + 2
  localVar2 <- x + y
  sum(x,y)
}

trace(testFunction, 
      quote({on.exit(assign("TraceEnv", parent.frame(4), .GlobalEnv))}))

sumXY <- testFunction()

if(with(TraceEnv, exists("localVar1") && exists("localVar2"))){
    print("test passed")
}
# [1] "test passed"
于 2013-11-11T05:45:34.763 に答える