9

我有一个大的 for 循环,循环了数百次,最后它会产生这个警告:

Warning messages:
1: In min(j, na.rm = TRUE) :
  no non-missing arguments to min; returning Inf

有什么办法可以问 R 警告消息是在哪一行生成的?


OP 在下面的评论:“我没有直接将 min 作为一行。它可能嵌套在其他函数中,否则我不会问这个问题,因为我知道这是一个来自 min 的问题。”

4

2 回答 2

13

您可以尝试设置:

options(warn = 2)

...将警告视为错误。然后,当您的代码在第一个警告处停止时,使用traceback()查看堆栈跟踪。

不过,这只会帮助您处理第一个警告。

要返回默认行为,请使用:

options(warn = 0)
于 2013-03-03T19:50:08.590 回答
2

这是一个基本的for循环方法,并不真正R依赖

就在你min放线之前

 print(paste("j is", j, "\n"))  # or instead of j, use i, or whichever index you are using     
 min(j, na.rm = TRUE) 

那么您将对错误所在的位置有一个很好的了解。


至于更R相关的解决方案,如果 j 来自 data.frame、matrix、list 等,
您想找到哪个块(迭代部分)只有NAs。

为此,您可以使用类似的东西

  apply(myDF, 1, function(x) all(is.na(x)))
于 2013-03-03T20:07:37.413 回答