我有一个大的 for 循环,循环了数百次,最后它会产生这个警告:
Warning messages:
1: In min(j, na.rm = TRUE) :
no non-missing arguments to min; returning Inf
有什么办法可以问 R 警告消息是在哪一行生成的?
OP 在下面的评论:“我没有直接将 min 作为一行。它可能嵌套在其他函数中,否则我不会问这个问题,因为我知道这是一个来自 min 的问题。”
我有一个大的 for 循环,循环了数百次,最后它会产生这个警告:
Warning messages:
1: In min(j, na.rm = TRUE) :
no non-missing arguments to min; returning Inf
有什么办法可以问 R 警告消息是在哪一行生成的?
OP 在下面的评论:“我没有直接将 min 作为一行。它可能嵌套在其他函数中,否则我不会问这个问题,因为我知道这是一个来自 min 的问题。”
您可以尝试设置:
options(warn = 2)
...将警告视为错误。然后,当您的代码在第一个警告处停止时,使用traceback()
查看堆栈跟踪。
不过,这只会帮助您处理第一个警告。
要返回默认行为,请使用:
options(warn = 0)
这是一个基本的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 等,
您想找到哪个块(迭代部分)只有NA
s。
为此,您可以使用类似的东西
apply(myDF, 1, function(x) all(is.na(x)))