【发布时间】:2021-04-26 03:40:03
【问题描述】:
我有一些循环计算一个值。有时该计算会触发警告。如何检查是否触发了警告,然后跳过该迭代?我正在使用 R。
在 cmets 的帮助下,我找到了 tryCatch() 并且能够将我的 for 循环修改如下并正常工作:
for (i in seq(1,100,1)){
x<-sample(1:length(df$values), 1)
input<-copy_df[x:x+5,]
val<-tryCatch(myfunc(input$colA), warning=function(w) w)
if (is(val,warning){
next
}
print(paste0(i))
}
val 的输出应该是长度为 5 的列。
【问题讨论】:
-
查看
?Control帮助页面。 for 循环有一个next关键字来移动到下一次迭代。但一般来说,如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 -
查看其他副本以了解如何检查警告:stackoverflow.com/questions/3903157/…
-
很难检测到警告发生的位置,因为每次迭代循环时我都会通过随机观察。因此,很难调试和创建可重现的示例。我要求的功能与 myfunc() 无关,但更多处理 warnings()。
-
只需将
tryCatch包裹在任何可能产生警告的地方。