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
参考资料
©哈尔滨商业大学 银河统计工作室
银河统计工作室成员由在校统计、计算机部分师生和企业数据数据分析师组成,维护和开发银河统计网和银河统计博客(技术文档)。专注于数据挖掘技术研究和运用,探索统计学、应用数学和IT技术有机结合,尝试大数据条件下新型统计学教学模式。
邮箱:wanglei@hrbcu.edu.cn 关于我们