R语言流程控制语句
一、程序结构
R语言的程序结构包括:
- 顺序结构:默认从上到下依次执行。
- 选择结构 :根据条件选择执行不同代码块(
if、switch、ifelse)。 - 循环结构 :重复执行某段代码(
repeat、while、for)。 - 跳转结构 :中断或跳过某次循环(
next、break)。
二、选择语句
1. if 语句
语法:
r
if (条件) {
条件为真时执行的代码
}
案例:
r
# 定义一个变量x,赋值为10
x <- 10
# 判断x是否大于5
if (x > 5) {
# 如果条件成立(TRUE),输出以下信息
print("x大于5")
}
2. if...else 语句
语法:
r
if (条件) {
条件为真时执行
} else {
条件为假时执行
}
案例:
r
# 定义成绩
score <- 58
# 判断是否及格
if (score >= 60) {
print("及格")
} else {
print("不及格")
}
3. if...else if...else 语句(多条件)
语法:
r
if (条件1) {
条件1真
} else if (条件2) {
条件2真
} else {
全假
}
案例:
r
# 定义成绩
score <- 85
# 多等级判断
if (score >= 90) {
print("优秀")
} else if (score >= 75) {
print("良好")
} else if (score >= 60) {
print("及格")
} else {
print("不及格")
}
4. 多分支 switch 语句
语法(数值型):
r
switch(表达式,
值1 = 代码块1,
值2 = 代码块2,
默认代码块
)
语法(字符型):
r
switch(字符串,
匹配值1 = 代码1,
匹配值2 = 代码2,
默认代码
)
案例(数值型):
r
# 定义一个数字选项
option <- 2
# 使用switch进行多分支选择
result <- switch(option,
"1" = "进入功能1",
"2" = "进入功能2",
"3" = "进入功能3",
"无效选项"
)
print(result)
案例(字符型):
r
# 定义操作类型
operation <- "add"
# 根据字符串执行不同操作
output <- switch(operation,
add = "执行加法",
sub = "执行减法",
mul = "执行乘法",
"未知操作"
)
print(output)
5. 向量化的 ifelse 语句
语法:
r
ifelse(测试条件, 真时返回值, 假时返回值)
案例:
r
# 创建一个数值向量
scores <- c(55, 78, 92, 43, 88)
# 向量化判断:大于等于60为"及格",否则"不及格"
result_vec <- ifelse(scores >= 60, "及格", "不及格")
# 输出结果
print(result_vec)
三、循环语句
1. repeat 语句(无限循环,需配合 break)
语法:
r
repeat {
循环体代码
if (退出条件) break
}
案例:
r
# 初始化计数器
i <- 1
# 使用repeat循环
repeat {
# 打印当前i的值
print(paste("当前i =", i))
# 增加计数器
i <- i + 1
# 退出条件:i大于5时跳出循环
if (i > 5) {
break
}
}
2. while 语句
语法:
r
while (条件) {
循环体
}
案例:
r
# 初始化变量
n <- 1
# 当n小于等于5时执行循环
while (n <= 5) {
# 输出n的平方
print(paste(n, "的平方是", n^2))
# 更新n值
n <- n + 1
}
3. for 语句
语法:
r
for (变量 in 序列) {
循环体
}
案例:
r
# 定义一个向量
numbers <- c(2, 4, 6, 8, 10)
# 遍历每个元素
for (num in numbers) {
# 计算并输出元素的一半
print(paste(num, "的一半是", num / 2))
}
另一种常见用法(1到10):
r
# 从1循环到10
for (i in 1:10) {
# 输出i的3次方
print(paste(i, "的3次方是", i^3))
}
4. replication() 函数(replicate)
语法:
r
replicate(n, 表达式)
- 将表达式重复执行
n次,并收集结果。
案例:
r
# 重复运行某个随机数生成过程
set.seed(123) # 固定随机种子,确保结果可重复
# 重复5次,每次生成3个服从正态分布的随机数
res <- replicate(5, rnorm(3, mean = 0, sd = 1))
# 查看结果(5列,每列3个数)
print(res)
# 另一个例子:重复运行一个简单表达式
result2 <- replicate(4, 10 + 5)
print(result2)
四、跳转语句
1. next 语句(跳过本次循环剩余部分,进入下一次迭代)
语法:
r
for (变量 in 序列) {
if (跳过条件) next
正常执行的代码
}
案例:
r
# 遍历1到10
for (i in 1:10) {
# 如果i是偶数,跳过本次循环
if (i %% 2 == 0) {
next
}
# 只输出奇数
print(paste("奇数:", i))
}
2. break 语句(提前终止整个循环)
语法:
r
while (条件) {
if (终止条件) break
}
案例:
r
# 初始化
x <- 1
# while循环
while (TRUE) {
print(paste("当前x =", x))
# 当x达到5时强制停止循环
if (x == 5) {
print("触发break,停止循环")
break
}
# 增加x
x <- x + 1
}
五、综合案例:条件 + 循环 + 跳转
r
# 目标:对1到10每个数判断奇偶,只处理奇数到平方,遇到大于5的奇数停止
for (num in 1:10) {
# 判断是否为偶数
if (num %% 2 == 0) {
next # 偶数跳过
}
# 打印奇数信息
cat("正在处理奇数:", num, "\n")
# 判断是否大于5
if (num > 5) {
cat("奇数大于5,终止循环\n")
break
}
# 输出奇数的平方
cat("奇数的平方:", num^2, "\n")
}
六、要点回顾
| 知识点 | 作用 |
|---|---|
if |
单条件选择 |
if...else |
二分支选择 |
if...else if |
多分支选择 |
switch |
多值精确匹配分支 |
ifelse |
向量化条件判断 |
repeat |
无条件循环,需手动 break |
while |
条件前置循环 |
for |
遍历循环 |
replicate |
重复执行某个表达式 |
next |
跳过本次循环剩余部分 |
break |
强制终止整个循环 |