2016-10-19 7 views
0

私は現在、特定のプロットに対してかなり大きな関数を書いています。私はバグ修正のために関数によって作成されたすべてのオブジェクトを保持したいと思いますが、これまでのWeb検索は成功していません。関数の一時的な環境をRに保存できますか?

クイックビジュアライゼーション。この単純なケースでは

fun <- function(x) { 
    y <- x+1 
    z <- y^2 
    z*4 
} 

fun(2) 
[1] 36 

を仮定し、私は私の機能の農産物の特定の段階をもたらされる理解できるようにアクセス可能な環境でyおよびzを維持したいと思います。

ありがとうございます!

+0

このようにしますか? 'fun < - function(x){y < - x + 1; z←y^2; – count

+1

デバッグでは、 'browser()'を使用してデバッグします。この関数は、呼び出されたときに対話型セッションに入ります。そこではfuncitionsスコープ内の変数を探索し、変更することさえできます。 – snaut

+0

@snautと同意します。バグフィックスの理由で保存したいオブジェクトはどれですか?一時的または永続的?それらのオブジェクトのどの値ですか?最終か中間か?デバッグセッションを開始するほうがよいです。 RStudioのような現代のR IDEはこれを非常に簡単にします。 – tchakravarty

答えて

1

あなたは、リスト内のオブジェクトを返すか、@ user116からの回答と同様に

assign("x", x, envir = .GlobalEnv) 
+0

ありがとう、これは役に立ちます! – LAP

1

と関数内の変数を割り当てることができ、あなたが望むものを達成するための特別な演算子があります。

これは<<-演算子を使用して、割り当て関数へのショートカットです。詳細はhelp("<<-")をご覧ください。しかし、基本的に、あなたがこれを行うことにより、地球環境におけるyzを「救う」ことができます:

# Make sure that these do not exist first. 
stopifnot(all(!exists("y"), !exists("z"))) 

fun <- function(x) { 
    y <<- x+1 
    z <<- y^2 
    z*4 
} 

fun(2) 

# Verify y and z exist now. 
stopifnot(all(exists("y"), exists("z"))) 
y 
z 

長い関数を記述するための役に立つかもしれません環境、などについて学ぶことがたくさんありますので、これは単なるです氷山の一角。

関連する問題