如何在嵌套循环中使用tryCatch来打印错误和警告的步骤号?

hfsqlsce  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(124)

我已经找到了几个与这个问题有关的帖子,但我只是浪费了我的时间!
我在R中有一个嵌套的for循环(2个循环),在内部循环中有时会出现error,有时会出现warnings,但是代码会运行整个迭代,所以我找不到发生这些情况的步骤。
我想用tryCatch找出这些发生在哪些步骤中,即迭代次数
由于我有一个很大的数据文件(几乎有3000行),所以很难手动找到它们。
下面是一个类似的可复制代码:

flist= seq(2,14,3)
res=NULL

for(j in 1:length(flist))
{
ff=flist[j]
msave=NULL

for(i in 1:50)
{
run1 = ff/0.0009 #here error or warnings occur#
run2 = run1/i
minus=run1-run2
msave=c(msave,minus)
}

res=c(res,mean(msave))
}

请建议我如何用tryCatch编辑这段代码。谢谢。

hc8w905p

hc8w905p1#

根据help(tryCatch)的详细部分:

flist= seq(2,14,3)
res=NULL

for(j in 1:length(flist))
{
  # Catch outer loop
  tryCatch(
    {
      ff=flist[j]
      msave=NULL
      
      for(i in 1:50)
      {
        # catch inner loop
        tryCatch(
          {
            run1 = ff/0.0009 #here error or warnings occur#
            run2 = run1/i
            minus=run1-run2
            msave=c(msave,minus)
          },
          # Error catcher for inner loop
          error = function(err){
            print(paste(j, i))
          },
          # evaluated after inner "error"
          finally = function(fin)invisible()
        )
      }
      res=c(res,mean(msave))
    },
    # error catcher for outer loop
    error = function(err){
      print(j)
    },
    # Evalauted after outer "error"
    finally = function(fin)invisible()
  )
}

相关问题