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

2024-09-02 04:20

本文主要是介绍【R语言速通】2.循环和条件判断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

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

1. 循环

1. for循环

for (variable in sequence) {# 循环体
}

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

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

e.t.:

for (i in 1:5) {print(strrep("*", i))
}
[1] "*"
[1] "**"
[1] "***"
[1] "****"
[1] "*****"

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

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

2. while循环

while (condition) {# 循环体
}

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

e.t.:

i <- 1
while (i <= 5) {print(i)i <- i + 1
}

3. repeat循环

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

repeat {# 循环体if (condition) {break}
}

e.t.:

# 输出1到5
i <- 1
repeat {print(i)i <- i + 1if (i > 5) {break}
}

4.nextbreak语句

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

e.t.:

# 输出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语句

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

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

e.t.:

x <- 5
if (x > 0) {print("x is positive")
}

2.if...else语句

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

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

e.t.:

x <- -3
if (x > 0) {print("x is positive")
} else {print("x is not positive")
}

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

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

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

e.t.:

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

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

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

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 结构。其基本语法如下:

switch(EXPR, case1 = {...},case2 = {...},...caseN = {...})

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

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

e.t.:

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"

这篇关于【R语言速通】2.循环和条件判断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128978

相关文章

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4