首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >try-catch in for循环用于回归

try-catch in for循环用于回归
EN

Stack Overflow用户
提问于 2020-07-18 19:45:01
回答 1查看 46关注 0票数 0

我在这段代码中运行了很多回归。

代码语言:javascript
复制
vek <- read_excel("h24.xlsx")
filterfile <- read_excel("filterfile.xlsx")

x <- c(filterfile$Column)
sink("D:/test.csv")
for (temp_var in x){
  h24 <- filter(vek,KEY == temp_var)
  h24 <- na.omit(h24)
  frml <- UNITS ~ h36+ z24+ z36+ pr
  
  if (length(unique(h24$`F`)) > 1) frml <- update.formula(frml, ~ F + .)
  if (length(unique(h24$`D`)) > 1) frml <- update.formula(frml, ~ D + .)
  
  lmtest <- lm(frml, data = h24)
  
  
print(vif(lmtest))
}
sink()

print(vif(lmtest))抛出一些错误:there are aliased coefficients in the model

在出现这些错误的情况下,我想运行alias(lmtest)

即使有一些关于trycatch()的帖子,我也不能修复它。解决这个问题最简单的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-18 19:59:00

R中的tryCatch可以参考Python语言中很好的错误处理。您可以尝试使用tryCatch来捕获错误,并在必要时重新运行代码。请注意,您可以检查命令是否返回了错误,甚至可以检查到底是什么错误。

代码语言:javascript
复制
throwRandomError <- function(x = 0.5) {
  if (runif(1) > x) {
    stop("Random error encountered")
  } else {
    return(x)
  }
}

set.seed(2)
ok <- tryCatch(
  throwRandomError(x = 0.5),
  error = function(e) e
)

bad <- tryCatch(
  throwRandomError(x = 0.5),
  error = function(e) e
)

str(bad)

List of 2
 $ message: chr "Random error encountered"
 $ call   : language throwRandomError(x = 0.5)
 - attr(*, "class")= chr [1:3] "simpleError" "error" "condition"

# Catch any type of class, error, simpleError or condition.
# Only one is probably enough, but left here for redundancy.
if (class(bad) %in% c("error", "simpleError", "condition")) {
  print("Rerunning lmtest")
  result <- print(alias(lmtest))
}

您可以使用类似以下内容的内容来捕获特定错误

代码语言:javascript
复制
if (bad$message == "Random error encountered") {
  print("adapting workflow")
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62968160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档