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

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 强制终止整个循环
相关推荐
an12321211 天前
ARM嵌入式学习笔记:SPI通信协议详解
arm开发·笔记·学习
by209991 天前
从结构体到对象:正式学习C++类的骨架、封装与this指针
c++·经验分享·学习
乌暮1 天前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习
2601_962218611 天前
C语言中三种库的编译和使用方法
开发语言·c++
传奇开心果编程1 天前
中庸、有容、破执:仓颉编程语言的中华智慧结晶——三重哲学境界思辨
开发语言·华为·开源·软件工程
jimy11 天前
派生类重写基类虚函数(二):override的作用
开发语言·c++
小雪崩1 天前
嵌入式学习 day60:ARM汇编——触摸屏与SPI
汇编·arm开发·学习
_upupup1 天前
异常(C++)
java·开发语言·jvm
霸道流氓气质1 天前
ComfyUI 图像生成工作流完全指南:从节点编排到Java生产级图像生产实战
java·开发语言·人工智能
问天_观心1 天前
大模型训练与推理优化(二)
人工智能·深度学习·学习·大模型·transformer