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

第一段代码中的错误是,如果int确实从 class 继承"try-error",则适合丢弃lme()适合。您是否打算分配它然后调用intervals()它并将其分配给无论如何包含模型术语间隔intint

如果是这样,第一个代码块应该是:

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 回答