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 强制终止整个循环
相关推荐
LDR0065 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术5 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
通信小呆呆5 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
码云数智-园园5 天前
C++20 Modules 模块详解
java·开发语言·spring
H__Rick5 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee5 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
swordbob5 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享5 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.5 天前
C语言--day30
c语言·开发语言
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker