【问题标题】:R : Run while loop until all elements of a vector are less than a thresholdR:运行while循环,直到向量的所有元素都小于阈值
【发布时间】:2017-03-12 14:19:30
【问题描述】:

在 R 中,我希望我的 while 循环继续,直到特定向量“theta_diff”(在每次迭代中的 while 循环中更新)中的每个元素都减小到特定阈值“epsilon”以下。 目前我可以通过在 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 向量的长度。

【问题讨论】:

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


    【解决方案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
      }
    

    这意味着做...直到...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-01
      • 2019-09-10
      • 2016-01-02
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      相关资源
      最近更新 更多