1.基本结构:
for (变量 in list) {expression}
#变量可以为任何(合法的)名称
🌰:for (i in 1:10)print(i)
#i为多少就打印多少
例题1:利用循环实现斐波那契数列
num.fibs=50#斐波那契数列的最大个数
r=numeric(num.fibs)
r[1]=1
r[2]=1
for (i in 3:num.fibs){
r[i]=r[r-2]+r[r-1]
}
r
例题2:利用循环计算一组数字当中最大的数字注意,下标是从1开始,c语言中是从0开始。
2.矩阵的遍历(嵌套循环)
思考:如何让这30个数横着生成?
解决:
a<-matrix(nrow=5,ncol=6)
a#这个时候生成的5行6列的矩阵a全部都是NA
n<-1#以后要把行列的值都赋成n
for( i in 1:5)#外循环(行)
for(j in 1:6)#内循环(列)
{
a[i,j]<-n#全都赋值成n
n<-n+1#下一个生成的是n+1,第一个数是1
}
a
#ctrl+A 全选
#ctrl+回车 运行
#mac用户ctrl改成command
应用:求最大/小值
a<-sample(1:99,20)
b<-matrix(a,nrow = 5)
b
myMax<-b[1,1]
myMin<-b[1,1]
Maxi<-1
Maxj<-1
Mini<-1
Minj<-1
for (i in 1:5)
for (j in 1:4) {
if (myMax<b[i,j]) {
myMax<-b[i,j]
Maxi=i#注意这里不要赋值"<-"
Maxj=j
}
if (myMin>b[i,j]) {
myMin<-b[i,j]
Mini=i
Minj=j
}
}
myMin
myMax
Maxi
Maxj
Mini
Minj
实现:
rm(list = ls())#清空环境变量
a<-matrix(0,nrow=9,ncol=9)
a
for (i in 1:9)
for(j in 1:9)
a[i,j]=i*j
for(i in 1:9){for(j in 1:i)#最多只能到8行8列,9行9列,不能到8行9列
cat(a[i,j]," ")#大括号里的内容到这里指的是输出一行
cat("\n")}#换行
3.循环的值与索引
4.添加判断结果
a<-round(rnorm(10))#先小数后整数
a<sample(0:100,10)#0到100之间生成10个数
a<-sample (0:100,10)
a
r<-c(
for(i in 1:length(a)){
r[i]<-"及格"
if(a[i]<60) r[i]<-"不及格"
}
r1<-cbind (a,r)
class (r1)#输出的是Matrix 矩阵
r1
r2<-data.frame(a,r)#输出的是data.frame 数据框
r2