R语言初学者——控制流之循环

for循环

for循环和其他语言一样就是依次取出一个可迭代的数据。

for(var in seq) statement

  • 下标访问
> for(i in c(1:length(vec))){print(i)}
[1] 1
[1] 2
[1] 3
> for(i in c(1:length(vec))){print(vec[i])}
[1] "a"
[1] "b"
[1] "c"
  • 元素访问
> for(i in vec){print(i)}
[1] "a"
[1] "b"
[1] "c"
  • 嵌套循环
> a<-matrix(c(1:20),4)
> a
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

> for(i in c(1:nrow(a)))
+ for(j in c(1:ncol(a)))
+ {print(a[i,j])}
[1] 1
[1] 5
[1] 9
[1] 13
[1] 17
[1] 2
[1] 6
[1] 10
[1] 14
[1] 18
[1] 3
[1] 7
[1] 11
[1] 15
[1] 19
[1] 4
[1] 8
[1] 12
[1] 16
[1] 20

 类似的我们也可以对其他数据类型进行访问

打印九九乘法表

for(i in c(1:9)){
  for(j in c(1:i))
    {a=i*j
    cat(i,"*",j,"=",a,'')}
    cat('\n')}
    

> source('jjcfb.R')
1 * 1 = 1 
2 * 1 = 2 2 * 2 = 4 
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 

此时应注意cat()和print()的区别。具体区别以后会说 

repeat循环

> s=0
> i=1
> repeat{
+ if(i>100){break}
+ s=s+i
+ i=i+1
+ }
> s
[1] 5050
> 

一定要有一个break条件

while循环

先看一个简单的

> i <- 1
> s <- 0
> while(i<=100){
+ s<-s+i
+ i<-i+1
+ }
> s
[1] 5050
> 

下面我们来计算e的值,要求前后两项的精度小于0.001

i<-1
e<-1
while((1/prod(1:i)-1/prod(1:(i+1)))>0.001){
e<-e+1/prod(1:i)
i<-i+1
}
print(e)

> source('E:/Rworking/e值.R')
[1] 2.718056

下面是计算圆周率的代码

repeat形式

n<-0
i<-0
for (j in c(1:6))
{repeat{if(i>10^j){break}
  a<-runif(1,0,1)
  b<-runif(1,0,1)
  if(a^2+b^2<1){n<-n+1}
  i=i+1}
  pi<-n*4/10^j
  print(pi)}

> source('E:/Rworking/pi值_repeat.R')
[1] 3.6
[1] 2.96
[1] 2.984
[1] 3.1312
[1] 3.13252
[1] 3.142208

while形式

n<-0
i<-0
for (j in c(1:6))
{while(i<=10^j){
  a<-runif(1,0,1)
  b<-runif(1,0,1)
  if(a^2+b^2<1){n<-n+1}
  i=i+1}
pi<-n*4/10^j
print(pi)}

> source('E:/Rworking/pi值_while.R')
[1] 2.8
[1] 2.96
[1] 3.14
[1] 3.1556
[1] 3.14
[1] 3.141552

猜你喜欢

转载自blog.csdn.net/qq_43264642/article/details/88374730