如果观察到警告,则跳过for循环[R]中的迭代
我有一个循环来计算一个值。有时,这种计算会触发一个警告。如何检查是否触发了警告,然后跳过该迭代?我用的是R 在评论的帮助下,我找到了tryCatch(),并能够修改我的for循环,如下所示:如果观察到警告,则跳过for循环[R]中的迭代,r,for-loop,try-catch,R,For Loop,Try Catch,我有一个循环来计算一个值。有时,这种计算会触发一个警告。如何检查是否触发了警告,然后跳过该迭代?我用的是R 在评论的帮助下,我找到了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(
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))
}
用于(序列(1100,1)中的i){
这里有一个完整的示例,使用随机生成警告的测试函数
set.seed(101)
foo <- function() {
x <- runif(1)
if(x<.9) warning("low x")
x
}
for(i in 1:20) {
didwarn <- tryCatch({x <- foo(); FALSE}, warning = function(w) return(TRUE))
if(didwarn) {
next
}
print(paste("high x", x))
}
set.seed(101)
foo请参阅?Control
帮助页面。for循环有一个next
关键字可移动到下一次迭代。但一般来说,如果包含一个简单的示例输入和所需的输出,可用于测试和验证可能的解决方案,则更容易帮助您。另请参阅另一个副本,了解如何检查警告:it is diffi无法检测警告发生的位置,因为每次迭代循环时我都会传递一个随机观察结果。因此,很难调试和创建一个可复制的示例。我要求的功能与myfunc()无关,而是更多的句柄警告()。只需将tryCatch
环绕可能产生警告的任何内容即可。
for(i in 1:20) {
tryCatch({
x <- foo();
print(paste("high x", x))
},
warning = function(w) {
# do nothing
})
}