首页 > 解决方案 > 如何在循环中处理 R 警告?

问题描述

我有一个用例,我需要一些基于某些代码生成的警告数量的控制流:

# clear all warnings 
assign("last.warning", NULL, envir = baseenv())

for (i in 0:100) {
   # call warning-generating code here

   x <- warnings()
   cat(paste('There were',length(x),'warnings generated\n'))
   if (length(x)>10) {
      # do something
   }

   # clear all warnings again
   assign("last.warning", NULL, envir = baseenv())
}

由于某种原因,此代码不起作用。代码总是会给出There were 0 warnings generated......为什么?如果我在循环外运行有问题的警告生成代码,它会产生非零可变数量的警告......

标签: r

解决方案


不确定这是否是您的目标?

# clear all warnings 
assign("last.warning", NULL, envir = baseenv())
x <- rep(NA, 100)
for (i in 1:100) { 
 # call warning-generating code here
  x[i] <- warning()
  cat(paste('There were',sum(!is.na(x)),'warnings generated\n'))
  if (sum(!is.na(x))>10) {
# do something
  }
  # clear all warnings again
  assign("last.warning", NULL, envir = baseenv()
}

看起来像是一个错字——afaik warnings() 只会向你显示警告——在循环中的这一品脱处仍然是 NULL;警告()将产生。


推荐阅读