跳到主要内容

R语言 for 循环

提示
  1. R语言中的循环类型:R中有三种循环类型:whileforrepeat循环,用于重复执行代码块。
  2. for循环的使用for循环在R中用于遍历元素对象,如列表或向量,语法为for (value in sequence) {代码块}
  3. for循环的高级应用:在for循环中,可以使用break语句退出循环,next语句跳过当前迭代,以及嵌套for循环来执行复杂的数据操作。

在编程中,循环用于重复执行一段代码块。循环帮助你节省时间,避免重复的代码块,并编写更干净的代码。

在 R 中,有三种类型的循环:

R 中的 for 循环

for 循环用于遍历列表、向量或任何其他元素对象。for 循环的语法是:

for (value in sequence) {
# 代码块
}

这里,sequence 是元素的对象,value 接收这些元素中的每一个。在每次迭代中,代码块被执行。例如,

numbers = c(1, 2, 3, 4, 5)

# for 循环打印 numbers 中的所有元素
for (x in numbers) {
print(x)
}

输出

[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

在这个程序中,我们使用了 for 循环遍历一个名为 numbers 的数字序列。在每次迭代中,变量 x 存储序列中的元素,然后执行代码块。

示例 1:计算偶数的数量

让我们使用 for 循环来计算存储在一个数字向量中的偶数数量。

# 数字向量
num = c(2, 3, 12, 14, 5, 19, 23, 64)

# 存储偶数数量的变量
count = 0

# for 循环计算偶数的数量
for (i in num) {

# 检查 i 是否为偶数
if (i %% 2 == 0) {
count = count + 1
}
}

print(count)

输出

[1] 4

在这个程序中,我们使用了 for 循环来计算 num 向量中偶数的数量。这个程序的工作原理如下:

  • 我们首先将 count 变量初始化为 0。我们使用这个变量来存储 num 向量中偶数的数量。
  • 然后我们使用 for 循环通过变量 i 遍历 num 向量。
for (i in num) {
# 代码块
}
  • for 循环内部,我们检查每个元素是否能被 2 整除。如果可以,那么我们将 count 增加 1
if (i %% 2 == 0) {
count = count + 1
}

示例 2:带有 break 语句的 for 循环

你可以使用 break 语句在任何迭代中退出 for 循环。例如,

# 数字向量
numbers = c(2, 3, 12, 14, 5, 19, 23, 64)

# 带有 break 的 for 循环
for (i in numbers) {

# 如果数字为 5,则跳出循环
if( i == 5) {
break
}

print(i)
}

输出

[1] 2
[1] 3
[1] 12
[1] 14

这里,我们在 for 循环中使用了 if 语句。如果当前元素等于 5,我们使用 break 语句跳出循环。此后,不再执行任何迭代。

示例 3:带有 next 语句的 for 循环

除了终止循环,你还可以使用 next 语句跳过一个迭代。例如,

# 数字向量
numbers = c(2, 3, 12, 14, 5, 19, 23, 64)

# 带有 next 的 for 循环
for (i in numbers) {

# 使用 next 跳过奇数
if( i %% 2 != 0) {
next
}

print(i)
}

输出

[1] 2
[1] 12
[1] 14
[1] 64

这里,我们在 for 循环中使用了 if 语句来检查奇数。如果数字是奇数,我们使用 next 语句跳过该迭代,并只打印偶数。

嵌套 for 循环

你可以在一个 for 循环内部包含另一个 for 循环,以创建嵌套循环。

考虑下面的例子。假设我们有两个数字序列。我们想要打印所有两个序列中数字之和为偶数的组合。

# 数字向量
sequence_1 = c(1, 2, 3)
sequence_2 = c(1, 2, 3)

# 嵌套 for 循环
for (i in sequence_1) {
for (j in sequence_2) {

# 检查和是否为偶数
if ( (i+j) %% 2 == 0 ) {
print(paste(i, j))
}

}
}

输出

[1] "1 1"
[1] "1 3"
[1] "2 2"
[1] "3 1"
[1] "3 3"

在上述程序中,我们创建了两个序列:sequence_1sequence_2,它们都包含从 13 的数字。

然后我们使用嵌套 for 循环遍历这些序列。外层循环遍历 sequence_1,内层循环遍历 sequence_2

for (i in sequence_1) {
for (j in sequence_2) {
# 代码块
}
}

在每次迭代中,

  • i 存储 sequence_1 的当前数字
  • j 存储 sequence_2 的当前数字

嵌套循环内的 if 语句检查 i + j 是否为偶数。如果是,那么我们就打印 ij

if ( (i+j) %% 2 == 0 ) {
print(paste(i, j))
}