【问题标题】:Iteration in r for loopr for 循环中的迭代
【发布时间】:2021-12-20 15:22:25
【问题描述】:

我想编写一个for 循环,该循环遍历vectorlist,我在每次迭代中向它们添加值。我想出了以下代码,它的迭代次数不超过 1 次。我不想使用while 循环来编写这个程序。我想知道如何控制循环迭代器。提前致谢。

steps <- 1
random_number <- c(sample(20, 1))
for (item in random_number){
  if(item <18){
    random_number <- c(random_number,sample(20, 1))
    steps <- steps + 1
  }
}
print(paste0("It took ", steps, " steps."))

【问题讨论】:

  • 您的代码 sample(20, 1) 仅创建一个随机数。这就是为什么循环只进行一次迭代的原因,因为for 期望一个项目向量循环通过。如果您想要多个随机数,请使用 ample(20, n) 并作为您想要的值 n &gt;1
  • @Jan 感谢您的评论。我知道,主要问题是关于编写一个 for 循环以迭代动态向量。如果你动态地将值添加到一个向量中,这个 for 循环将不起作用。

标签: r loops for-loop foreach iterator


【解决方案1】:

这实际上取决于您想要实现的目标。无论哪种方式,恐怕您都无法即时更改迭代器。 while 在这种情况下似乎是合理的,或者可能知道合理的最大迭代次数,您可以继续处理这些,并通过 if 语句处理不必要的迭代。根据您的代码,更像是:

steps <- 1

for (item in 1:100){
  random_number <- c(sample(20, 1))
  if(random_number < 18){
    random_number <- c(random_number,sample(20, 1))
    steps <- steps + 1
  }
}
print(paste0("It took ", steps, " steps."))

老实说,这与 while() 结合 if 语句以确保它不会永远运行并没有真正的不同。

【讨论】:

    【解决方案2】:

    这是不可能的。 for 循环中使用的向量在循环开始时进行评估,对该向量的任何更改都不会影响循环。您将不得不使用while 循环或其他类型的迭代。

    【讨论】:

    • 同意。 'for' 不是用于此目的的适当控制结构。
    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2012-05-10
    • 1970-01-01
    • 2021-12-07
    • 2012-06-27
    • 1970-01-01
    相关资源
    最近更新 更多