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 强制终止整个循环
相关推荐
minglie13 小时前
高等代数试题
学习
Xiaofeng36934 小时前
GPT-5.6 发布后,我用了一个周末重新规划学习路线图
gpt·学习
我是坏垠4 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant5 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_5 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
其实防守也摸鱼5 小时前
运维--怎么看接口的请求和返回
运维·学习·网络安全·网络攻击模型·burpsuite·攻防对抗·蓝队
你怎么知道我是队长5 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
xingke5 小时前
C 语言多文件编程:(一)头文件、extern、编译链接
c语言·开发语言·多文件
酷讯网络_2408701605 小时前
区块粮仓宠物NFT源码区块狗/抢购转让预约区块投资理财系统
学习·开源·宠物
Generalzy6 小时前
从本地 Demo 到生产级检索:Milvus 学习笔记(3)
笔记·学习·milvus