2

Rスクリプトを自動化して、大量の分析でループを実行しようとしていますが、現在、失敗したCIテスト中に警告を出して次の応答変数に進むために行き詰まっています。「tryCatch」と「try」を別々に試しました。誰かが私が間違っていることとそれを修正する方法を教えてもらえますか? それはおそらくばかげたことですが、私はそれを整理するために何週間も費やしました. 以下のコードを一般化すると混乱するので、元の形式のままにしています。

これが私が持っているもので、関連するエラーは次のとおりです-

int <- try(intervals(tmpLme))
if (inherits(int, "try-error"))
    lme(tmp ~ I(log10(Body.mass..kg.)), random = ~1 | Species / CatNumber,
        data=felids, na.action=na.omit )

lower <- dim(int$fixed)[1] 
upper <- dim(int$fixed)[1] 
felidCIlower <- append(felidCIlower, int$fixed[,1],lower) 
felidCIupper <- append(felidCIupper, int$fixed[,3],upper)  

これはスキップしたいエラーですが、次の点に注意してください。

Error in intervals.lme(tmpLme) : 
  Cannot get confidence intervals on var-cov components: Non-positive
  definite approximate variance-covariance 

これは私が望んでいないエラーです - 上記のエラーをスキップしようとしてもうまくいかないことを示しています:

Error in int$fixed : $ operator is invalid for atomic vectors

次に、この試みがあります

int.model <- function(tmpLme)
int <- tryCatch(intervals(tmpLme), error=function(e) NULL )

-また-

int <- tryCatch(intervals(tmpLme),
                error=function(e) lme(tmp ~ I(log10(Body.mass..kg.)),
                                      random = ~1 | Species / CatNumber,
                                      data=felids,na.action=na.omit ))
lower <- dim(int$fixed)[1] 
upper <- dim(int$fixed)[1] 
felidCIlower <- append(felidCIlower, int$fixed[,1], lower) 
felidCIupper <- append(felidCIupper, int$fixed[,3], upper)  

Error in !after : invalid argument type

前もって感謝します!

4

2 に答える 2

0

コードの最初のチャンクの間違いは、 ifintが class から継承する場合"try-error"、適合する適合を破棄するlme()ことです。intervals()それを割り当てて、それを呼び出して、それを割り当てて、何があってもモデル期間の間隔intが含まれるようにするつもりでしたか?int

その場合、最初のコード チャンクは次のようになります。

int <- try(intervals(tmpLme))
if (inherits(int, "try-error")) {
    tmpLme2 <- lme(tmp ~ log10(Body.mass..kg.), random = ~1 | Species/CatNumber,
                   data=felids, na.action=na.omit)
    int <- intervals(tmpLme2)
}

また、式の呼び出しのI(....)周りは必要ないことに注意してください。log10()

于 2012-09-04T20:06:27.740 に答える
0

failwith()パッケージでの使用はplyrどうですか?

library(plyr)
# Change the NULL to whatever you want to return in case of an error.
clean_interval <- failwith(NULL, intervals)
int <- clean_interval(tmpLme)
于 2012-09-04T20:08:35.247 に答える