R编程中的While循环
除了我们前面讨论的for循环外,R还提供了另一种执行迭代编程的循环,即while循环。
在许多情况下,我们无法确切知道希望循环运行多少次。
在这种情况下," while"是最有用的编程结构。
只要我们最初提供的条件成立,就会运行while循环。
R中while循环的结构
while(anycondition){ #Do something }
通常,while循环会不断更改条件变量直到某个点。
例如,如果变量为TRUE,我们可能希望循环运行。
当while循环内满足某个条件时,可以将变量值更改为" FALSE"并终止循环。
应谨慎处理此终止条件,以免陷入无限循环。
我们将很快看到一些示例。
简单的while循环示例
a=TRUE while(a==TRUE){ print("Entering loop") print("A is true") a=FALSE }
这个简单的代码首先将布尔变量a的值设置为TRUE。
while循环检查a的值是否为TRUE。
因为它是真的,所以它进入循环并首先打印" A是真的"。然后将分配给
FALSE
。在下一个循环运行中,while循环检查a值,该值不是'FALSE',因此立即退出循环。
让我们看一下输出。
输出:
[1] "Entering Loop" [1] "A is true"
这里的循环哨兵语句仅被打印一次,因为该循环不会第二次运行,且值为FALSE。
在while循环中使用break语句
由于while循环有可能陷入无限循环并耗尽系统内存,因此在几种情况下使用" break"是理想的。
让我们来看一个例子。
循环的最常见计算应用是序列的生成。
假设您希望打印斐波那契数列直到一个特定的限制,例如直到该数量小于或者等于300。
您肯定不知道要达到300个迭代次数。
以下是使用while循环显示斐波那契序列的幼稚方法。
f1=0 f2=1 sum=0 while(TRUE){ sum <- f1+f2 f1 <- f2 f2 <- sum print(sum) }
很有可能您只会在控制台上看到指数和Inf编号,它们会继续打印,直到您按下控制台左上方的STOP按钮为止。
这里的问题在于循环的while(TRUE)部分。
我们指定编译器永久运行循环并生成所有斐波那契数。
因此,我们需要通过将条件放入循环中来处理该循环。
让我们来看一段修改后的代码。
f1=0 f2=1 sum=0 while(TRUE){ sum <- f1+f2 f1 <- f2 f2 <- sum if(sum>300){ break } print(sum) }
现在,我们使用上面的if语句块处理了总和大于300的条件。
一旦满足条件,我们就简单地打破循环并摆脱困境。
现在让我们看一下输出:
[1] 1 [1] 2 [1] 3 [1] 5 [1] 8 [1] 13 [1] 21 [1] 34 [1] 55 [1] 89 [1] 144 [1] 233
序列中的下一个数字将是377,该数字大于300。
但是我们已经在打印总和并因此中断循环之前已经检查了总和是否大于300。
因此,我们只能得到序列直到233。
现在尝试显示总和值。
有趣的是,它是377,而不是233。
> sum [1] 377
计算总和值377并将其存储在总和中,但由于我们退出循环,因此不打印总和。