R:运行while循环,直到向量的所有元素都小于阈值

时间:2016-10-30 05:25:18

标签: r loops vector while-loop logical-operators

在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向量的长度无关。

1 个答案:

答案 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
  }

表示 执行...直到...