1

R を使用して分析している大量のデータの一部として、一連のデータセットに対してパッケージ Robustbase から lmrob を繰り返し呼び出します。

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
}

ただし、一部のデータ セットはエラーを返します。上記のエラー処理では抑制されません。

だから私は次のようなことを試します

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 関数を繰り返し呼び出すことができるように、この状況にアプローチする正しい方法は何ですか。

後で結果をチェックして、解が収束したことを確認し、収束しなかった結果を破棄します。ご協力ありがとうございます。

4

1 に答える 1

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))
于 2013-08-06T03:08:13.730 に答える