1

这是我的问题:

我正在使用循环在对象列表上运行函数。大多数对象工作正常并产生所需的输出。但是,其他一些会产生错误,当这种情况发生时,循环会停止运行。

我试图找到一种方法,每次循环找到一个给出错误的对象时,循环都会忽略有问题的对象并转到下一个对象。所以循环可以运行到整个列表的末尾,只产生运行良好的对象的输出。

我正在实现这样的循环:

for(i in n:m){
   myfunction
}

谢谢你!

4

2 回答 2

2

只需将可能失败的内容包装起来try()

for(i in n:m){
out[[i]] = try( myfunction )

}  
  out

可能更好的是把try()inside myfunction()。但我不知道该功能需要什么。有时一个好的策略是将输出预先分配给 NA,然后在 for 循环开始时询问:

 if("conditionwherefunctionfails") i = i+1

那将跳过该迭代并继续您的循环。

于 2013-02-25T21:59:20.233 回答
1

几乎没有什么可以继续的,但是您只需要一个 if 语句来识别麻烦的对象,并且什么都不做,否则执行您的函数:

for(i in n:m){
    if ( i != ... ) { //replace ... with NaN or null, or whatever is causing the error
        myfunction(i)
    }
}

由于信息有限,我无法告诉您应该用什么代替...

于 2013-02-25T21:58:33.287 回答