文章目录
-
- [1. 循环](#1. 循环)
-
- [1. `for`循环](#1.
for
循环) - [2. `while`循环](#2.
while
循环) - [3. `repeat`循环](#3.
repeat
循环) - 4.`next`和`break`语句
- [1. `for`循环](#1.
- [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.next
和break
语句
在循环体中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 语言中,逻辑向量
TRUE
和FALSE
可以用作索引来对子集进行选择, 使用逻辑向量(TRUE
或FALSE
)来索引一个向量、数据框或矩阵时,只有与逻辑向量中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"