2013-08-06 48 views
1

作爲我使用R分析的大量數據的一部分,我從包robustbase中對lmrob反覆調用一系列數據集。 「如何處理重複調用lmrob中的錯誤R

for (i in uniq.w) { 
    y <- x[x$w==i,4] 
    t<-seq(length(y)) 
    result <- try(lmrob(y~t,na.action=na.exclude)) 
    if(class(result) == "try-error") next; 
    output[[i]] <- result 
} 

但是有些數據集返回錯誤」eigen(ret,symmetric = TRUE)中的錯誤:'x'中的無限或缺失值。哪些不受上述錯誤處理的抑制。

所以我嘗試像

for (i in uniq.w) { 
    y <- x[x$w==i,4] 
    t<-seq(length(y)) 
    result <- suppressWarnings(tryCatch(lmrob(y~t,na.action=na.exclude),error=function(e) e)) 
    if(inherits(result,"error")) next 
    output[[i]] <- result 
} 

這確實抑制了錯誤和警告。然而,他們似乎仍然存在於系統中的某個地方。當我隨後調用lmrob時,它不起作用。相反,它會返回與上一次調用相同的結果。 (當然,很可能還有其他一些我忽略的問題)。

什麼是正確的方法來處理這種情況,所以我可以反覆調用R函數沒有錯誤影響後續批次。

後來,我檢查結果以確保解決方案收斂並放棄沒有的結果。感謝您的幫助。

+0

你是什麼意思「AREN」 t通過上述錯誤處理抑制「? 'try'應該會發現任何錯誤,包括你提到的錯誤。 –

+0

@HongOoi你是對的,但由於某種原因,第一個例子仍然會引發錯誤。必須有一些我可以忽略的東西。至於我的其他評論關於隨後的調用返回相同的結果,那是我在其他地方的錯誤。 agstudy的答案行得通。 – Antonio2100

回答

1

定義,你在一個循環中調用

f.lmrob <- function(i){ 
    y <- x[x$w==i,4] 
    t<-seq(length(y)) 
    lmrob(y~t,na.action=na.exclude) 
} 

然後使用tryCatch功能,您國旗例如自定義代碼無效輸入:

lapply(uniq.w, function(i) 
    tryCatch(f.lmrob(i), error=function(e)-1000-i))