2016-10-15 15 views
0

tryCatch()をループ内で使用する方法を理解しようとしています。エラーを作成し、ループ内の次の項目に移動する値はスキップします。私は(この場合はそう-5から0に)警告またはメッセージを生成し、ログの任意の値をスキップしようとしていますTryCatchはエラー/警告をスキップします

i=0 
Log<- function(x) { 
tryCatch(log(x), 
warning = function(w) {i=i+1;next}, 
      error = function(e) {i=i+1;next}, 
        finally={log(x)}) 
} 

for(input in (-5:5)) { 
    print(paste("log of", input, "=", Log(input))) 
} 

と取る:次のように私はログを迅速にループを作成した構文を理解するために、 (したがって、最初はi = 0であり、i = i + 1である)。ただし、これは動作していません、次のエラーを生成します。

Error in value[[3L]](cond) : no loop for break/next, jumping to top level 

答えて

0

元のコードに問題があります。あなたはtryCatchの中にnextと呼んでいて、それは必要ではない/意味がありません。これは、nextが呼び出されているときにコードがループの内側にないため、エラーメッセージにブレークするループがないことを示しています。代わりに、警告またはエラーでカウンターを増やして、Log()への次回の呼び出しを関数外から行うようにしてください。このコードを試してみてください。

Log <- function(x) { 
    tryCatch(log(x), 
      warning = function(w) {i=i+1}, 
      error = function(e) {i=i+1}, 
      finally = {log(x)}) 
} 

しかし、なぜあなたはfinallyブロックに再びlog(x)を呼んでいますか?代わりに、完全に省略することができます。

+0

Typo my bad、それを試しても同じエラーメッセージが表示される –

関連する問題