R语言入门学习教程,从入门到精通,R语言流程控制语句(5)

R语言流程控制语句


一、程序结构

R语言的程序结构包括:

  • 顺序结构:默认从上到下依次执行。
  • 选择结构 :根据条件选择执行不同代码块(ifswitchifelse)。
  • 循环结构 :重复执行某段代码(repeatwhilefor)。
  • 跳转结构 :中断或跳过某次循环(nextbreak)。

二、选择语句

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 强制终止整个循环
相关推荐
大龄码农-涵哥1 小时前
Java 调用 LLM 全解析:ChatGPT、Claude、通义千问一网打尽
java·开发语言·chatgpt
小新同学^O^1 小时前
简单学习 --> JVM
java·开发语言·python
YangYang9YangYan1 小时前
2026营销新人学习数据分析的应用
学习·数据挖掘·数据分析
郝学胜-神的一滴1 小时前
二叉树与递归:解锁高级数据结构的编程内功心法
开发语言·数据结构·c++·算法·面试
wjs20241 小时前
Julia 正则表达式
开发语言
燐妤1 小时前
前端HTML编程4:深入学习CSS
前端·学习·html
基德爆肝c语言1 小时前
Qt:显示类控件
开发语言·qt·命令模式
lightqjx1 小时前
【Linux】第一个小程序:进度条
linux·服务器·学习·缓存·c·进度条实现
无限进步_1 小时前
【C++】深入右值引用:移动语义与完美转发
java·开发语言·c++