一、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为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函数将所有行的和保存在一个向量中,并返回给我们。