R语言-控制语句

R语言中的控制语句

前言

  控制结构程序运行的顺序,一般包括:

	if, else:测试模中情况
	for: 循环运行
	while: 如果为真就运行
	repeat: 循环运行
	break: 停止运行
	next: 跳出
	return: 回到某个功能更

目录

 1. if判断

 2. for循环

 3. While循环

 4. Repeat循环

 5. next循环

1. if判断

	---------------------------------------------------------

	# if爱你,else就要和你在一起,又要给你一些距离

	if (con){
		expr
	} else{
		expr2
	}

	# if...else..结构中,}与else必须在同一行。
	# 简易形式(不推荐):
	# else不能与expr在同一行

	if (con) expr
	else expr2

	# 建议将所有if ... else ...结构写成第一种形式,如果没有else,用else {}代替。

	---------------------------------------------------------

	# code1
	if(<>) {
	## do something
	} else {
	## do something else
	}
	
	# code2
	if() {
	## do something
	} else if() {
	## do something different
	} else {
	## do something different
	}
	
	# code3
	# 如果这样会报错
	if(x > 3) {
		y <- 10
	} else {
		y <- 0
	}

	# code4
	# 应该是这样
	y <- if(x > 3) {
		10
	} else {
		0
	}
	
	---------------------------------------------------------

2. for循环

	R语言中for循环的程序样板
	---------------------------------------------------------

	for(var in seq) expr
	
	参数
	
	var		seq中的元素
	seq		list、vector、data.frame
	expr 	执行的逻辑

	这个是for循环的程序样板,for循环会遍历seq中的每个元素,每次遍历把一个元素放在var中,seq可以是list、vector、DataFrame等数据结构;
	每次遍历的时候,我们可以在expr的表达式位置,加上自己的处理逻辑。

	---------------------------------------------------------

	##### 案例1:

	for(i in 1:5) print(i)

	ss <- seq(from=1, to=10, by=0.1)

	for(s in ss) {
	  print(s)
	}

	df = data.frame(
	  age=c(21, 22, 23),
	  name=c('KEN', 'John', 'JIMI'),
	  stringsAsFactors = FALSE
	);

	#如果用in进行遍历data.frame,那么默认按列遍历
	for(l in df) {
	  print(l);
	  print(l['age'])
	  print(l['name'])
	  print("---------------------")
	}

	for(i in 1:nrow(df)) {
	  l <- df[i, ]
	  print(l);
	  print(l['age'])
	  print(l['name'])
	  print("---------------------")
	}

	---------------------------------------------------------
	
	##### 案例2:
	
	 for(i in 1:10) {
	 print(i)
	 }
	 
	# 下面的三种写法意思一样
	x <- c("a", "b", "c", "d")
	 
	for(i in 1:4) {
	   print(x[i])
	 }
	
	 for(i in seq_along(x)) {
	   print(x[i])
	 }
	
	 for(letter in x) {
	   print(letter)
	 }
	
	 for(i in 1:4) print(x[i])
	
	 # 二维for
	 x <- matrix(1:6, 2, 3)
	 for(i in seq_len(nrow(x))) {
		 for(j in seq_len(ncol(x))) {
		   print(x[i, j])
		 }
	 }

	---------------------------------------------------------

3. While循环

	R语言中while语言遍历的样板
	---------------------------------------------------------		
	
		while(cond) expr	
	
	参数
	
	cond	逻辑条件语句
	expr 	执行的逻辑

	While循环是一个只要条件cond为真,那么就会一直执行下去的循环,所以while true这个语句也叫作死循环语句,它接受一个cond的参数输入,接着后面就是它要执行的程序逻辑。

	---------------------------------------------------------

	##### 案例1:
	
	i = 0
	while(i<5) {
	  i <- i+1;
	  print(1:i);
	}

	i = 0
	while(i<5) {
	  i <- i+1
	  if(i==4) {
		next;
	  }
	  print(1:i);
	}

	i = 0
	while(TRUE) {
	  i <- i+1
	  if(i==4) {
		next;
	  }
	  print(1:i);
	  if(i==10) {
		break;
	  }
	}

	---------------------------------------------------------
	
	##### 案例2:

	count <- 0
	while(count < 10) {
		print(count)
		count <- count + 1
	}
	
	
	z <- 5
	while(z >= 3 && z <= 10) {
	        print(z)
	        coin <- rbinom(1, 1, 0.5)
	        if(coin == 1) {  ## random walk
	              z <- z + 1
	        } else {
	              z <- z - 1
			}
	}

	---------------------------------------------------------

4. Repeat循环

	---------------------------------------------------------

	R语言中repeat语言遍历的样板,注意这是个死循环,使用break跳出死循环
	
	repeat expr
		
	参数
	expr 	执行的逻辑

	While当它的condition写死为true的时候,才算是死循环,而Repeat直接就是个死循环了,它没有condition这个参数,所以我们要注意在执行的逻辑中,使用break关键字跳出死循环。

	---------------------------------------------------------

	##### 案例1:
	
	i = 0

	repeat {
	  i <- i+1
	  if(i==4) {
		next;
	  }
	  print(1:i);
	  if(i==10) {
		break;
	  }
	}

	---------------------------------------------------------

	##### 案例2:

	# 停止repeat的方式就是break
	x0 <- 1
	tol <- 1e-8
	repeat {
		x1 <- computeEstimate()
		if(abs(x1 - x0) < tol) {
			break
		} else {
			x0 <- x1
		}
	}

	---------------------------------------------------------

5. next循环

	for(i in 1:100) {
		if(i <= 20) {
		 	## Skip the first 20 iterations
			next
		}
		## Do something here
	}
	## return signals that a function should exit and return a given value

参考资料

posted @ 2016-06-13 16:40  银河统计  阅读(1259)  评论(0编辑  收藏  举报