在日常生活中很多问题都无法一次性解决,需要循环往复地重复多次才能完成。例如,盖楼需要一层层地盖,每层的建筑方式是类似的;公交车、地铁等交通工具必须每天往返于始发站和终点站之间。类似这样反复做同一件事的情况称为循环。
在R语言中,循环语句有4种类型,下面分别进行介绍。
repeat循环就是重复地、一次又一次地执行相同的任务,直到满足停止条件。这就好比我们绕着操场跑圈,一圈又一圈,直到第5圈停止。
在R语言中,repeat语句的语法格式如下:
repeat { 循环体 if(条件表达式) { break } }
repeat循环语句的执行流程如图5.8所示。
图5.8 repeat循环语句流程图
【例5.5】 操场跑圈计数 (实例位置:资源包\Code\05\05)
下面使用repeat循环记录操场跑圈,直到第5圈停止,运行RStudio,编写如下代码。
运行程序,结果如图5.9所示。
图5.9 操场跑圈计数
在while循环中,只要满足条件就会一遍又一遍地执行相同的代码;直到不满足条件时,退出循环。语法格式如下:
while (条件表达式) { 循环体 }
while循环语句的执行流程如图5.10所示。
图5.10 while循环语句流程图
【例5.6】 while循环记录操场跑圈 (实例位置:资源包\Code\05\06)
下面使用while循环记录操场跑圈,直到第5圈停止,运行RStudio,编写如下代码。
1 # 初始值为1 2 n <- 1 3 while (n <6 ){ 4 print(paste("第",n,"圈")) 5 # 计数 6 n <- n+1 7 }
运行程序,结果如图5.11所示。
图5.11 while循环记录操场跑圈
for循环是一个计次循环,一般应用在循环次数已知的情况下。通常适用于枚举或遍历序列,以及迭代对象中元素的情况。语法格式如下:
for (迭代变量 in 向量表达式) { 循环体 }
在R语言中,for循环语句特别灵活。其中,迭代变量用于保存读取的值;向量表达式通常是一个序列,可以是整数或输入的数字、字符向量、逻辑向量、列表或表达式。
for循环语句的执行流程如图5.12所示。
图5.12 for循环语句流程图
【例5.7】 输出1~12月份 (实例位置:资源包\Code\05\07)
下面使用for循环语句输出1~12月份,运行RStudio,编写如下代码。
1 a <- c(1:12) 2 for ( i in a) { 3 print(paste(i,"月")) 4 }
运行程序,结果如图5.13所示。
图5.13 输出1~12月份
【例5.8】 求1~100所有数的和 (实例位置:资源包\Code\05\08)
下面使用for循环计算1~100所有数的和,运行RStudio,编写如下代码。
1 myval <- 0 # 初始值为0 2 for(i in 1:100){ # 求1~100所有数的和 3 myval = myval + i 4 } 5 print(myval)
运行程序,结果为5050。
replicate()函数可以重复指定次数执行表达式。语法格式如下:
replicate(n, expr)
参数说明如下。
n:重复执行次数。
expr:待执行的表达式。
【例5.9】 重复一个值多次 (实例位置:资源包\Code\05\09)
在实际数据分析中,replicate()函数应用十分广泛。下面使用replicate()函数将1重复10次,运行RStudio,编写如下代码。
replicate(n=10, 1)
运行程序,结果如图5.14所示。
【例5.10】 使用replicate()函数生成数据 (实例位置:资源包\Code\05\10)
下面借助replicate()函数重复生成5次样本数据,每个样本数据包括10个平均值为5,标准差为3的符合正太分布的数据。运行RStudio,编写如下代码。
1 # 生成10个平均值为5,标准差为3的符合正态分布的数据 2 # 重复5次 3 data <- replicate(n=5, rnorm(10, mean=5, sd=3)) 4 # 显示数据 5 data
代码解析
第3行代码:rnorm()函数用于生成服从正态分布的随机数。默认生成平均数为0,标准差为1的随机数。
运行程序,结果如图5.15所示。
图5.14 1重复10次
图5.15 使用replicate()函数生成数据