2016-07-18 3 views
1

私は、これらの機能がどのような形で始まっているのかを教えてくれないことをお詫びします。エラーが発生しなくなるまで、rで関数を繰り返し実行します。

私には、機能があります。CheckOutCellです。それは1つの議論をとり、それは数764です。したがって、私が関数を実行するたびに、それは完全に次のようになります:CheckOutCell(764)

今では多くの時間関数は、私にエラーを与える:

Error in checkInCell(764) : 
The function is currently locked; try again in a minute. 

カスタムエラーメッセージであり、詳細はこの質問への重要されていません。

この機能は、30秒から1時間のどこからでもロックされる可能性があります。 が実行されるまで自動的にCheckOutCell(764)を実行してから、実行を停止したいと考えています。つまり、エラーが出なくなるまで実行してから停止します。

私は機能がまだロックされているので、何も出力をキャプチャすることはできないので、しかし、これは単なる

Error in checkInCell(764) : 
The function is currently locked; try again in a minute. 

を生産開始が

while(capture.output(checkInCell(764)) == "Error in checkInCell(764) : 
The function is currently locked; try again in a minute."){ 
do something} 

を使用することだと思います。私はwhile(error = T)

をテストする方法を

は、関数のソースコードを変更することはできませんと仮定します。

がさえis.error(CheckInCell(764))がちょうど同じエラーメッセージ

+0

tryCatchを試しましたか? – Koba

+0

私は、どこに行くのかわかりません。私が 'tryCatch'を使って自分の質問に答えると、 –

+0

elseブロックの中に 'stopifnot'または' stop'を入れてみます。 'stop'を使用している場合は、必ず呼び出しを行ってください。 = FALSE、適切なエラーメッセージを渡す – Sathish

答えて

0

が生成されますので、このコードは

wrapcheck <- function(x){ 
repeatCheck =tryCatch(checkOutCell(764), 
        error = function(cond)"skip") 

SudoCheck = ifelse(repeatCheck=="skip",repeatCheck, checkOutCell(764)) 

while(SudoCheck == "skip"){ 
repeatCheck 
} 
} 

wrapcheck(764) は基本的に、これはエラーをチェックしてから実行し続けるように動作しているようですエラーが発生しなくなるまで機能します。実際、私はこれがCheckOutCellの代わりに入れたいと思っていた機能でうまくいくとかなり確信しています。

主な問題は、関数がロックされているときに、実際にはエラーではなく、がロックされていることです。です。したがって、上記のブロックは機能しません。このブロックは、ロック以外のエラーが発生した場合に機能します。

関連する問題