一、for循环语句
for循环语句是一种有规律的循环结构,可以按照指定的次数执行某项任务。它的语法结构如下:
for(变量名 in 序列){
循环体语句
}
其中,变量名是指在循环中要使用的变量名,序列是指循环的次数或者是一个向量,循环体语句是要重复执行的一系列操作。 实际应用中,for循环语句经常与向量、矩阵等数据结构一起使用。下面是一个求向量元素和的例子:
x <- c(1,2,3,4,5)
sum <- 0
for(i in x){
sum <- sum + i
}
print(sum)
这段代码中,我们首先定义了一个向量x
和一个变量sum
。接着,使用for循环语句遍历向量x
的每一个元素,并将其加入到sum
变量中。最终输出sum
的值,即向量x
的元素和。
二、while循环语句
while循环语句是一种当条件为真时就重复执行某项任务的循环结构。它的语法结构如下:
while(条件){
循环体语句
}
其中,条件是一个逻辑表达式,循环体语句是要重复执行的一系列操作。 下面是一个求1到100的和的例子:
n <- 1
sum <- 0
while(n <= 100){
sum <- sum + n
n <- n + 1
}
print(sum)
这段代码中,我们使用while循环语句计算1到100的和。首先,定义变量n
为1和变量sum
为0。循环体内部,我们将变量n
累加到变量sum
中,并且每次循环结束之后使n
加1。当n
大于100时,循环结束。最终输出sum
的值,即1到100的和。
三、repeat循环语句
repeat循环语句是一种无限循环结构,会一直执行循环体中的语句,直到遇到break
语句终止循环。它的语法结构如下:
repeat{
循环体语句
if(条件){
break
}
}
其中,循环体语句是要重复执行的一系列操作,条件是一个逻辑表达式。在循环体中,我们使用if
语句来检查条件是否为真,如果为真则使用break
语句将循环终止。
下面是一个使用repeat循环语句猜数字的例子:
answer <- 28
while(TRUE){
guess <- as.integer(readline("请猜一个数字:"))
if(guess == answer){
print("恭喜你猜对了!")
break
} else if(guess < answer){
print("猜小了,请继续。")
} else {
print("猜大了,请继续。")
}
}
在这个例子中,我们首先定义了一个正确的答案answer
为28。接着使用while
循环语句,当条件为真时就一直重复猜数字的操作。在每一次循环中,我们首先使用readline
函数从命令行中读取一个整数,然后使用if
语句来检查这个数是否等于答案。如果相等,则输出猜对了并且使用break
语句终止循环。否则,我们还要进一步检查这个数和答案之间的大小关系,输出提示信息让用户继续猜测。
四、apply函数家族
apply
函数家族是一组广泛应用于R语言中矩阵和数据框的函数。它们可以应用于多维数据结构,并且可以替代很多for循环操作。在apply
函数家族中,最常用的有apply
、lapply
和sapply
等函数。
下面是一个使用apply
函数计算矩阵每一列的平均值的例子:
x <- matrix(c(1,2,3,4,5,6), nrow=2, ncol=3)
apply(x, 2, mean)
在这个例子中,我们首先定义了一个2x3的矩阵x
,然后使用apply
函数对矩阵x
的每一列应用mean
函数来计算平均值。其中,第二个参数2表示按列进行运算,返回的结果是一个长度为3的向量,包含了每一列的平均值。
另一个常用的函数是lapply
,它可以应用于列表结构并返回一个列表。下面是一个使用lapply
函数将列表中的元素都转成大写的例子:
x <- list("hello","world")
lapply(x, toupper)
在这个例子中,我们首先定义了一个包含两个元素的列表x
。然后,我们使用lapply
函数对列表x
中的每个元素应用toupper
函数,将字符串都转换成大写字母。输出结果为一个包含两个元素的列表,分别对应于原始列表x
中的每个元素。
除了apply
和lapply
函数外,sapply
函数也是一种常用的apply
函数家族的成员。它可以将结果转化成向量形式,并且可以自动进行简化。下面是一个使用sapply
函数计算矩阵每一行的和的例子:
x <- matrix(c(1,2,3,4,5,6), nrow=2, ncol=3)
sapply(1:nrow(x), function(i){sum(x[i,])})
在这个例子中,我们使用sapply
函数计算矩阵x
中每一行的和。其中,第一个参数1:nrow(x)
表示从1到矩阵x
的行数,将这些数视为每一行的编号;第二个参数是一个匿名函数,用来计算矩阵x
中某一行的和。在匿名函数中,我们使用sum
函数对第i
行元素求和,然后将结果返回。sapply
函数将所有行的和保存在一个向量中,并返回给我们。