在编程中,循环用于重复执行一段代码。循环可以帮助您节省时间,避免重复的代码块,并编写更简洁的代码。
在R中,有三种类型的循环
- while循环
- for循环
- repeat循环
R for 循环
for
循环用于迭代列表、向量或任何其他元素对象。for
循环的语法是
for (value in sequence) {
# block of code
}
在这里,sequence是一个元素对象,value接收其中的每个元素。在每次迭代中,代码块都会被执行。例如,
numbers = c(1, 2, 3, 4, 5)
# for loop to print all elements in numbers
for (x in numbers) {
print(x)
}
输出
[1] 1 [1] 2 [1] 3 [1] 4 [1] 5
在此程序中,我们使用for
循环遍历名为numbers的数字序列。在每次迭代中,变量x存储序列中的元素,并执行代码块。
示例1:计算偶数的数量
让我们使用for
循环来计算存储在数字向量中的偶数的数量。
# vector of numbers
num = c(2, 3, 12, 14, 5, 19, 23, 64)
# variable to store the count of even numbers
count = 0
# for loop to count even numbers
for (i in num) {
# check if i is even
if (i %% 2 == 0) {
count = count + 1
}
}
print(count)
输出
[1] 4
在此程序中,我们使用for
循环来计算num向量中偶数的数量。此程序的工作原理如下:
- 我们首先将count变量初始化为0。我们使用此变量来存储num向量中偶数的数量。
- 然后,我们使用
for
循环通过变量i遍历num向量。
for (i in num) { # code block }
- 在
for
循环内部,我们检查每个元素是否可被2整除。如果是,则将count加1。
if (i %% 2 == 0) { count = count + 1 }
示例2:带break语句的for循环
您可以使用break
语句在任何迭代中退出for
循环。例如,
# vector of numbers
numbers = c(2, 3, 12, 14, 5, 19, 23, 64)
# for loop with break
for (i in numbers) {
# break the loop if number is 5
if( i == 5) {
break
}
print(i)
}
输出
[1] 2 [1] 3 [1] 12 [1] 14
在这里,我们在for
循环中使用了一个if
语句。如果当前元素等于5
,我们使用break
语句终止循环。之后,将不会执行任何迭代。
示例3:带next语句的for循环
您可以使用next
语句跳过迭代,而不是终止循环。例如,
# vector of numbers
numbers = c(2, 3, 12, 14, 5, 19, 23, 64)
# for loop with next
for (i in numbers) {
# use next to skip odd numbers
if( i %% 2 != 0) {
next
}
print(i)
}
输出
[1] 2 [1] 12 [1] 14 [1] 64
在这里,我们在for
循环中使用了一个if
语句来检查奇数。如果数字是奇数,我们使用next
语句跳过迭代,并且只打印偶数。
嵌套for循环
您可以在另一个for
循环中包含一个for
循环来创建嵌套循环。
请看下面的示例。假设我们有两个数字序列。我们想打印所有两个序列中的数字之和为偶数的组合。
# vector of numbers
sequence_1 = c(1, 2, 3)
sequence_2 = c(1, 2, 3)
# nested for loop
for (i in sequence_1) {
for (j in sequence_2) {
# check if sum is even
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_1和sequence_2,它们都包含从1
到3
的数字。
然后,我们使用嵌套的for
循环来迭代这些序列。外层循环迭代sequence_1,内层循环迭代sequence_2。
for (i in sequence_1) {
for (j in sequence_2) {
# code block
}
}
在每次迭代中,
- i存储sequence_1的当前数字
- j存储sequence_2的当前数字
嵌套循环中的if
语句检查i + j
是否为偶数。如果是,则打印i和j。
if ( (i+j) %% 2 == 0 ) {
print(paste(i, j))
}