1

Possible Duplicate:
General suggestions for debugging R?

When debugging, I would often like to know the value of a variable used in a function that has completed executing. How can that be achieved?

Example:

I have function:

MyFunction <- function() {
    x <- rnorm(10) # assign 10 random normal numbers to x
    return(mean(x))
}

I would like to know the values stored in x which are not available to me after the function is done executing and the function's environment is cleaned up.

4

4 に答える 4

4

デバッグについておっしゃっていたので、スクリプトの後半では値は必要ないと思います。何が起こっているのかを確認したいだけです。その場合、私がいつもしているのは使用browserです:

MyFunction <- function() {
    browser()
    x <- rnorm(10) # assign 10 random normal numbers to x
    return(mean(x))
}

これにより、関数のスコープ内のインタラクティブコンソールに移動し、内部で何が起こっているかを調べることができます。

RIでのデバッグに関する一般的な情報については、このSO投稿をお勧めします。

于 2012-10-06T11:44:39.180 に答える
2
MyFunction <- function() {
    x <- rnorm(10) # assign 10 random normal numbers to x
    return(list(x,mean(x)))
}

これは、最初の要素が x で、2 番目の要素がその平均であるリストを返します。

于 2012-10-06T11:36:41.760 に答える
1

すでにいくつかの良い解決策があります。1 つの可能性を追加したいと思います。実行が完了した関数で使用される変数の値を知りたいという事実を強調します 。したがって、これらの値を割り当てる必要はないかもしれませんし、(先験的に) 実行を停止したくありません。解決策は、単に使用することです。したがって、デフォルトでは使用されませんが、デバッグする場合にのみ使用されます。印刷するかどうかのオプションは、関数の引数として渡すことができます。print

MyFunction <- function(x, y, verbose = FALSE) {
    a <- x * y
    if (verbose) print(a)
    b <- x - y
    if (verbose) print(b)
    return(a * b)
}

一般的には、次のように関数を実行します:MyFunction(10, 4)しかし、これらの中間結果を見たい場合は、MyFunction(10, 4, verbose = TRUE).

于 2012-10-06T12:03:06.400 に答える
1

ここには多くのオプションがあります。最も簡単なのは、<<-に代入するときに演算子を使用することxです。また、トラブルに巻き込まれる可能性が最も高いです

> test <- function() x <- runif(1)
> x <- NA
> test()
> x
[1] NA
> test <- function() x <<- runif(1)
> test()
> x
[1] 0.7753325

編集

@PaulHeimstra は、デバッグ用にこれが欲しいと指摘しています。以下は、いくつかの一般的なトリックへのポインタです。

R でのデバッグに関する一般的な提案

と設定するか、組み合わせてoptions(error=recover)使用​​することをお勧めします。trace()browser()

于 2012-10-06T11:34:04.710 に答える