其他:trycatch模块捕获循环错误,避免中断程序

介绍

今天有位同事问我怎么在某次循环报错后仍然可以继续程序运行,最后我们使用了trycatch模块。

在这里插入图片描述

代码解读

任务:在循环中,如果某次循环的calc出现错误则跳过这次循环并重新赋值结果

res_list <- list()  # 创建一个空列表来存储结果

for (i in Taxa) {
  
  tryCatch({
    fit <- calc(data %>% 
                  filter(Taxa == i) %>% 
                  select(-Taxa) %>% 
                  column_to_rownames("KO") %>% 
                  rownames_to_column("KO"), 
                annotation = 1)
    
    abundance <- asDataFrame(fit, "abundance")
    abundance$Taxa <- i
    res_list[[i]] <- abundance
  }, error = function(e) {
    cat("An error occurred in processing Taxa:", i, "\n")
    cat("Error message:", conditionMessage(e), "\n")
    res_list[[i]] <- NULL
  })
  
}

# 移除可能由于错误而留下的空值
res_list <- res_list[!sapply(res_list, is.null)]

# 合并结果
res <- do.call(rbind, res_list)

这里使用了 tryCatch 来捕获可能发生错误的代码块。如果calc函数在某次循环中报错,错误信息将被打印出来,并且会继续进行下一次循环,同时重置 res_list[[i]] 的值为空值,以确保不会保留之前循环中的错误结果。最后,移除可能留下的空值,并将结果合并成一个大的数据框架 res。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信学习者1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值