【发布时间】:2017-01-20 12:06:28
【问题描述】:
当while 循环卡在 R 中的无限循环中时,识别它的最佳方法是什么?
这是我的情况:
diff_val = Inf
last_val = 0
while(diff_val > 0.1){
### calculate val from data subset that is greater than the previous iteration's val
val = foo(subset(data, col1 > last_val))
diff_val = abs(val - last_val) ### how much did this change val?
last_val = val ### set last_val for the next iteration
}
目标是让val越来越接近稳定值,当val在上一次迭代中val的0.1以内时,则认为它足够稳定并从while 循环。我的问题是,对于某些数据集,val 在两个值之间来回交替卡住。例如,在 27.0 和 27.7 之间来回迭代。因此,它永远不会稳定下来。如果发生这种情况,我该如何打破while 循环?
我知道break,但不知道如何告诉循环何时使用它。我想保持之前两次迭代的值会起作用,但我不知道如何保持两次迭代前的值......
while(diff_val > 0.1){
val = foo(subset(data, col1 > last_val))
diff_val = abs(val - last_val)
last_val = val
if(val == val_2_iterations_ago) break
}
如何创建val_2_iterations_ago?
对不可重现的代码表示歉意。复制这种情况所需的真正的foo() 和data 不是我要分享的……不过,它们并不是解决控制流问题的关键。
【问题讨论】:
-
该过程通常是递减的吗?当超过某个(任意)限制时,您可能能够跟踪它不减少和中断的次数。
标签: r loops while-loop