【问题标题】:Skipping over an error warning in an lme loop in R在 R 的 lme 循环中跳过错误警告
【发布时间】:2023-03-08 23:44:02
【问题描述】:

我正在尝试自动化我的 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

提前致谢!

【问题讨论】:

  • 查看一些密切相关的问题herehere;另外,this 是我处理此类问题的方式。

标签: r


【解决方案1】:

第一段代码中的错误是,如果int 确实继承自类"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)
}

另请注意,您不需要在公式中的 log10() 调用周围使用 I(....)

【讨论】:

    【解决方案2】:

    在包plyr 中使用failwith() 怎么样?

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2014-08-29
      • 2018-01-25
      • 2021-04-26
      • 2018-12-21
      • 2014-11-07
      • 2023-03-25
      • 2020-09-12
      相关资源
      最近更新 更多