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 强制终止整个循环
相关推荐
万物智能信息科技2 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
蓝悦无人机2 小时前
Qt Design Studio(QDS)4.8.2项目文件结构详解
开发语言·qt·qt creator·qds·项目文件结构·qtc
woodykissme2 小时前
齿轮测量系列——齿轮测量这二十年
学习·机械·齿轮检测
yxlalm2 小时前
4.java秒杀项目第四课-后端商品后台接口
java·开发语言
孙启超2 小时前
【AI开发之Rust】第 1 课:认识 Rust 与开发环境 —— 装好工具链,跑通第一个程序
开发语言·人工智能·后端·ai·rust·安全架构
sunshine22 girl2 小时前
Java学习一 环境配置3 Idea中的maven仓库,pom.xml文件配置
学习·maven·intellij-idea
君顾13 小时前
家政派单小程序源码开发实战:从零搭建到上线全流程指南
java·开发语言·家政派单
我是唐青枫4 小时前
C#.NET PInvoke 深入解析:封送、内存布局与原生互操作实战
开发语言·c#·.net
程序猿编码4 小时前
纯C++轻量计算机视觉推理引擎:基于GGML的端侧CV模型部署技术全解析
开发语言·c++·计算机视觉·大模型·transformer
SEO_juper4 小时前
外贸多语言站最隐蔽的流量杀手:hreflang 错了,谷歌把德语页推给美国人(附审计脚本)
开发语言·前端·python·seo·独立站·谷歌优化