95

データ分析を行うプログラムがあり、長さは数百行です。

プログラムの非常に早い段階で、品質管理を行いたいと考えています。十分なデータがない場合は、プログラムを終了して R コンソールに戻りたいと考えています。それ以外の場合は、残りのコードを実行します。

breakbrowser、およびquitそれらのどれもプログラムの残りの実行を停止しませんでした (実行を停止quitし、R を完全に終了します。これは私が望んでいることではありません)。私の最後の手段はif-else、以下のようなステートメントを作成することです:

 if(n < 500){}
 else{*insert rest of program here*}

しかし、それは悪いコーディング慣行のようです。何か不足していますか?

4

9 に答える 9

67

stopifnot()プログラムでエラーを発生させたい場合は、次の関数を使用できます。

foo <- function(x) {
    stopifnot(x > 500)
    # rest of program
}
于 2013-07-24T14:56:30.077 に答える
1

ここ:

if(n < 500)
{
    # quit()
    # or 
    # stop("this is some message")
}
else
{
    *insert rest of program here*
}

quit()との両方stop(message)がスクリプトを終了します。R コマンド プロンプトからスクリプトを取得している場合は、R からquit()も終了します。

于 2014-02-23T21:07:04.643 に答える
0

pskill「ツール」パッケージの機能を使用してR、現在のプロセスを中断し、コンソールに戻ることができます。具体的には、各スクリプトの最初にソースとして指定するスタートアップ ファイルに次の関数を定義しています。ただし、コードの先頭に直接コピーすることもできます。次にhalt()、コードの任意の場所に挿入して、スクリプトの実行をその場で停止します。この関数は GNU/Linux でうまく動作し、Rドキュメントから判断すると、Windows でも動作するはずです (ただし、確認していません)。

# halt: interrupts the current R process; a short iddle time prevents R from
# outputting further results before the SIGINT (= Ctrl-C) signal is received 
halt <- function(hint = "Process stopped.\n") {
    writeLines(hint)
    require(tools, quietly = TRUE)
    processId <- Sys.getpid() 
    pskill(processId, SIGINT)
    iddleTime <- 1.00
    Sys.sleep(iddleTime)
}
于 2014-08-20T11:30:20.170 に答える