2016-12-09 4 views
1

ここでの目的は、Rがスローしてオブジェクトに格納するエラーをキャプチャすることです。ここでgeterrmessage()をループで使用する - R

は、いくつかのダミーコードです:

for(i in 1:length(a)){try(
if (i==4)(print(a[i]/"b"))else(print(a[i]/b[i])) 
)} 

[1] -0.125 
[1] -0.2857143 
[1] -0.5 
Error in a[i]/"b" : non-numeric argument to binary operator 
[1] -1.25 
[1] -2 
[1] -3.5 
[1] -8 
[1] Inf 
[1] 10 

だから私は、エラーの繰り返し4日にそれをキャプチャしたいでした:オブジェクトへError in a[i]/"b" : non-numeric argument to binary operatorは言う:

error<-() 
iferror(error[i]<-geterrmessage()) 

私はIFERRORとしてその承知していますRで関数を使用することはできませんが、最後のエラーがgeterrmessageでしか捕捉されないため、このアイデアを得ようとしています

例iエラーが、

error[4]<-"Error in a[i]/"b" : non-numeric argument to binary operator" 

一切だから後で、私はerrorオブジェクトを確認することはできませんし、どこ理解し、あなたは私は非常に優れただろうコードを書くことができた場合はどのようなエラーが

が起こったので、error[1:3]<-'NA'error[5:10]<-'NA'のために言いたいです

+0

あなたは 'tryCatch'で見たことがありますか?役に立つかもしれない –

答えて

1

は、私は次の関数が役に立てば幸い感謝:?

a <- c(0:6) 
b <- c(-3:3) 

create_log <- function(logfile_name, save_path) { 
    warning("Error messages not visible. Use closeAllConnections() in the end of the script") 
    if (file.exists(paste0(save_path, logfile_name))) { 
    file.remove(paste0(save_path, logfile_name)) 
    } 
    fid <- file(paste0(save_path, logfile_name), open = "wt") 
    sink(fid, type = "message", split = F) # warnings are NOT displayed. split=T not possible. 
    sink(fid, append = T, type = "output", split = T) # print, cat 
    return(NULL) 
} 


create_log("test.csv", "C:/Test/") 
for(i in 1:length(a)){try(
    if (i==4)(print(a[i]/"b"))else(print(a[i]/b[i])) 
)} 
closeAllConnections() 
+0

完璧なおかげでChristoph ... –

関連する問題