R语言R语言知识干货

R语言与生信应用18-R语法-控制结构

2019-05-05  本文已影响67人  BioSi

R控制结构

R中的控制结构允许用户在不同情况下设置程序的执行流程。常见的结构包括:


控制结构:if

if(<condition>) {
        ## do something
} else {
        ## do something else
}
if(<condition1>) {
        ## do something
} else if(<condition2>)  {
        ## do something different
} else {
        ## do something different
}

下面是一些有效的 if/else 结构示例。

if(x > 3) {
        y <- 10
} else {
        y <- 0
}

等同于

y <- if(x > 3) {
        10
} else { 
        0
}

else语句不是必须的。

if(<condition1>) {

}

if(<condition2>) {

}

for

for 循环接收可迭代的变量,一般是来自序列或向量的连续值。for循环经常使用的循环元素来自于列表、向量等R对象。

for(i in 1:10) {
         print(i)
}

该循环将变量 i 作为循环变量,循环依次赋值1, 2, 3, ..., 10,然后退出循环。


下面几个循环的功能相同。

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])
        }   
}

慎重使用嵌套循环,嵌套超过2-3层后会难以阅读和理解,也会拖慢程序的运行速度。


while

while循环开始前先测试循环条件。如果值为真,执行循环体。当循环体运行完,再次测试循环条件,如此循环下去。

count <- 0
while(count < 10) {
        print(count)
        count <- count + 1
}

while循环如果没有正确编写,可能会陷入无限循环(死循环),使用时要注意。


有时需要同时满足多个判断条件进行循环。

z <- 5

while(z >= 3 && z <= 10) {
        print(z)
        # 随机生成0或1
        coin <- rbinom(1, 1, 0.5) 

        if(coin == 1) { 
                z <- z + 1
        } else {
                z <- z - 1
        } 
}

判断条件是从左到右进行判断。


repeat

repeat初始化一个无限循环,有特殊用途,通常不应用在数据统计分析中,退出repeat循环的唯一方法是break
以下循环是个repeat的无限循环,运行后需要强制终止。

x0 <- 1
tol <- 0

repeat {
        x1 <- rbinom(1, 1, 0.5) 

        if(abs(x1 - x0) < tol) {
                break
        } else {
                x0 <- x1
        } 
}

上面的循环对于初学者不友好,容易陷入死循环。最好设置迭代次数限制(例如使用for循环),然后打印是否得到预期结果。


next, return

next用来跳过本次循环。

for(i in 1:100) {
        if(i <= 20) {
                ## 跳过前20次循环
                next 
        }
        ## Do something here
}

return 表示一个函数的结果同时返回函数的运算结果。


小结

课程分享
生信技能树全球公益巡讲
https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
B站公益74小时生信工程师教学视频合辑
https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
招学徒:
https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw

上一篇下一篇

猜你喜欢

热点阅读