2011-10-26 8 views
7

私はsetTimeLimit()をRでマスターしようとしています。私の経験はいくつかの関連する質問につながっています。だから根本的な疑問があります。 (私もR.utilsからevalWithTimeout()を見てきた、それは少し良い私の目的に合うかもしれないが、それはこの機能上に構築されています。)ここでRでsetTimeLimitはどのように機能しますか?

は私が把握しようとしています重要なものです:

  1. どのように経過時間を監視していますか?私。それはフローコントロールに挿入されるようですが、それはどうしますか? 「バックグラウンド」プロセスを持つことができることは涼しく、ステータス、チェックポイントなどのレポートに使用できます。

  2. トリガされるまでの時間はどれくらいありますか?私はそれをラップしてどこかのどこかに、起動時点(すなわち、proc.time()の出力)で経過した& CPU時間を消費することができることを認識しています。しかし、この関数はすでにこれらをどこかに保存しています。残っている時間をどこで決定するか、または少なくともどのように知るかを知りたいと思います。

  3. Rコンソールがアイドル状態の場合に便利なことができますか? elapsed.time()cpu.time()を監視できることは非常に便利です。私はRがアイドルであるときを監視できるようにしたいと思っていますが、コマンドを送信または完了させる必要があるように見えます。さらに、エラーを出力しても、後続のアクションは実行されません。 (evalWithTimeoutにもっと注意を払う必要があるかもしれません)

  4. ヘルプ情報には、CやFortranにも適用できると書かれていますが、例は示されていません。これがどのように行われるべきかに関する提案はありますか?

+1

あなたはマルチスレッドプログラミングでどのくらいの経験がありますか?私が思い出しているように、これはコールバック・メカニズムに単純にフックして、処理サイクル数回ごとに目覚めてしまいます。たとえば、これを使用する例があります。あなたのR端末セッションのプロンプトを現在の時刻に更新する---これは愚かな例ですが、それでも役に立つ例です。 –

+0

私はマルチスレッドプログラミングを扱うことができます。私はそれがコールバックだと思ったが、それを固定しようとしていなかった。興味深いのは 'getTaskCallbackNames()'や 'taskCallbackManager()'の下に表示されないようです。 – Iterator

答えて

3

setTimeLimitは、Cの関数呼び出し時に動作しないことを示すために:

rfunction <- function(){ 
    repeat{ 
     x <- rnorm(100); 
    } 
} 

cfunction <- function(){ 
    x <- eigen(matrix(rnorm(1e6), 1e3)); 
} 

setTimeLimit(3); 
system.time(try(rfunction(), silent=TRUE)) 
system.time(try(cfunction(), silent=TRUE))