在R中,我希望我的while循环继续,直到特定向量中的每个元素' theta_diff' (在每次迭代中在while循环中更新)降低到低于特定阈值'ε。 目前,我可以通过在while循环测试条件中使用OR条件来实现这一点(theta_diff是一个2元素向量):
while((theta_diff[1]>epsilon)|(theta_diff[2]>epsilon))
{
}
我想知道是否有更聪明的方法来做到这一点?我尝试了all()但它实现了一个AND逻辑而不是OR逻辑,所以即使其中一个theta_diff元素符合条件,while循环也会停止。
while(all(theta_diff>epsilon))
{
}
寻找更智能选项的主要灵感在于:根据程序,theta_diff向量的维度可能会发生变化,我想使while循环条件与theta_diff向量的长度无关。
答案 0 :(得分:1)
我可以提出两个选项(theta_diff
中至少有一个元素大于epsilon
):
any(theta_diff > epsilon)
max(theta_diff) > epsilon
同样,以下两个是等效的(theta_diff
的所有元素都大于epsilon
):
all(theta_diff > epsilon)
min(theta_diff) > epsilon
有时使用repeat
比使用while
更具可读性。为什么不考虑:
repeat {
## blablabla
if (all(theta_diff > epsilon)) break
}
表示 执行...直到... 。