【R语言速通】2.循环和条件判断

文章目录

    • [1. 循环](#1. 循环)
      • [1. `for`循环](#1. for循环)
      • [2. `while`循环](#2. while循环)
      • [3. `repeat`循环](#3. repeat循环)
      • 4.`next`和`break`语句
    • [2. 条件判断](#2. 条件判断)
      • 1.`if`语句
      • 2.`if...else`语句
      • [3.`if...else if...else` 语句](#3.if...else if...else 语句)
      • [4. `ifelse()` 函数](#4. ifelse() 函数)
      • [4. `switch` 函数](#4. switch 函数)

1. 循环

1. for循环

r 复制代码
for (variable in sequence) {
  # 循环体
}

variable 是循环中的控制变量,依次取值为sequence中的每个元素。

sequence 是一个向量或列表,定义了循环的范围。(也可以是矩阵或者多维度数组,这种情况下for循环会将其视为一个向量,逐个元素进行遍历)

e.t.:

r 复制代码
for (i in 1:5) {
  print(strrep("*", i))
}
css 复制代码
[1] "*"
[1] "**"
[1] "***"
[1] "****"
[1] "*****"

strrep函数用于重复字符串,第一个参数是要重复的字符串,第二个参数是重复的次数。

注意r中的1:n是包括头与尾的

2. while循环

r 复制代码
while (condition) {
  # 循环体
}

condition 是一个逻辑表达式,当它为 TRUE 时,循环继续;为 FALSE 时,循环结束。

e.t.:

r 复制代码
i <- 1
while (i <= 5) {
  print(i)
  i <- i + 1
}

3. repeat循环

repeat循环用于无限循环,相当于while True除非使用 break 语句退出循环。

r 复制代码
repeat {
  # 循环体
  if (condition) {
    break
  }
}

e.t.:

r 复制代码
# 输出1到5
i <- 1
repeat {
  print(i)
  i <- i + 1
  if (i > 5) {
    break
  }
}

4.nextbreak语句

在循环体中next 语句用于跳过当前迭代,进入下一次迭代(相当于python中的pass),break 语句用于立即退出循环。

e.t.:

r 复制代码
# 输出1到5(跳过3)
for (i in 1:5) {
  if (i == 3) {
    next  # 跳过3
  }
  print(i)
}

# 输出1到2
for (i in 1:5) {
  if (i == 3) {
    break  # 遇到3时退出循环
  }
  print(i)
}

2. 条件判断

1.if语句

r 复制代码
if (condition) {
  # 条件为真时执行的代码
}

condition 是一个逻辑表达式,如果结果为 TRUE,则执行大括号 {} 中的代码。

e.t.:

r 复制代码
x <- 5
if (x > 0) {
  print("x is positive")
}

2.if...else语句

if...else 语句用于在条件为 TRUE 时执行一个代码块,为 FALSE 时执行另一个代码块。

r 复制代码
if (condition) {
  # 条件为真时执行的代码
} else {
  # 条件为假时执行的代码
}

e.t.:

r 复制代码
x <- -3
if (x > 0) {
  print("x is positive")
} else {
  print("x is not positive")
}

3.if...else if...else 语句

if...else if...else 语句用于测试多个条件:

r 复制代码
if (condition1) {
  # 条件1为真时执行的代码
} else if (condition2) {
  # 条件2为真时执行的代码
} else {
  # 以上条件都不满足时执行的代码
}

e.t.:

r 复制代码
x <- 0
if (x > 0) {
  print("x is positive")
} else if (x < 0) {
  print("x is negative")
} else {
  print("x is zero")
}

4. ifelse() 函数

ifelse() 函数是一个矢量化的条件判断函数,可用于在向量中根据条件进行选择。其基本语法如下:

r 复制代码
ifelse(test, yes, no)
  • test 是一个逻辑向量。
  • yes 是条件为 TRUE 时的返回值。
  • no 是条件为 FALSE 时的返回值。

其实ifelse() 函数可以自己定义一下:

r 复制代码
my_ifelse <- function(test, yes, no) {
  # 初始化一个与测试条件相同长度的向量
  result <- vector("numeric", length = length(test))
  
  # 当 test 为 TRUE 时赋值 yes 对应的元素,如果 yes 是向量就使用索引
  if (length(yes) > 1) {
    result[test] <- yes[test]
  } else {
    result[test] <- yes
  }
  
  # 当 test 为 FALSE 时赋值 no 对应的元素,如果 no 是向量就使用索引
  if (length(no) > 1) {
    result[!test] <- no[!test]
  } else {
    result[!test] <- no
  }
  
  return(result)
}

# 测试自定义函数
x <- 1:10
my_ifelse(x > 5, x, 0)

[1]  0  0  0  0  0  6  7  8  9 10

在 R 语言中,逻辑向量 TRUEFALSE 可以用作索引来对子集进行选择, 使用逻辑向量(TRUEFALSE)来索引一个向量、数据框或矩阵时,只有与逻辑向量中 TRUE 位置相对应的元素会被选中。

4. switch 函数

switch 语句用于根据表达式的结果执行不同的代码块,通常用于替代多重 if...else 结构。其基本语法如下:

r 复制代码
switch(EXPR, 
       case1 = {...},
       case2 = {...},
       ...
       caseN = {...})

·EXPR 是一个字符串或数值,表示要匹配的值。

·case1, case2, ... 是可能的选项和对应的代码块。

e.t.:

r 复制代码
x <- "B"
result <- switch(x,
                 "A" = "Option A selected",
                 "B" = "Option B selected",
                 "C" = "Option C selected",
                 "Invalid option")
print(result)
[1] "Option B selected"
相关推荐
奋斗的小花生几秒前
c++ 多态性
开发语言·c++
魔道不误砍柴功2 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨5 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程33 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸3 小时前
【一些关于Python的信息和帮助】
开发语言·python