专栏名称: 生信技能树
生物信息学学习资料分析,常见数据格式及公共数据库资料分享。常见分析软件及流程,基因检测及癌症相关动态。
目录
相关文章推荐
51好读  ›  专栏  ›  生信技能树

生信入门(八)——条件语句、循环语句

生信技能树  · 公众号  ·  · 2024-06-15 08:56

正文

从我们 生信技能树 历年的几千个马拉松授课学员里面募集了一些优秀的创作者,某种意义来说是传承了我们生信技能树的知识整理和分享的思想!


今天的是三周合计15天的数据挖掘授课学员一点一滴整理的授课知识点笔记哦,还有互动练习题哈,欢迎大家点击文末的阅读原文去关注我们学员的公众号哦!


在R语言中,条件语句和循环语句是控制流的重要组成部分,它们对于编写灵活且动态的程序至关重要。

条件语句

条件语句允许程序根据特定条件执行不同的代码块。在R语言中,常用的条件语句包括 if ifelse()、case_when() switch()

if

1. 在满足一个指定的条件时,执行一段代码。满足条件时为TRUE,之后if后面的代码,不满足时跳过执行。

i = 8if (i > 0 ) { print("i是正数")}# i是正数

2. 通常if与else连用,以此来应对更多的情况。

i = -8if (i > 0){print('i是正数')} else {print('i不是正数')}# i不是正数

3. if还可以与else if组合。

i = 0if (i > 0) {    print('i是正数')} else if (i == 0) {    print('i等于0')} else (i < 0) {    print('i是负数')}# i是负数

ifelse()函数

ifelse是一个向量化的函数,可以同时对多个条件进行判断,并返回相应的值。它不需要像 if 那样嵌套,使得代码更加简洁。它的语法是:

ifelse(test, yes, no)# test为一个可以转换成逻辑值的对象# test为TRUE时执行yes# test为FALSE时执行noi = 8ifelse(i>0, "i是正数""i不是正数")# i是正数

在转录组实战中,可以利用ifelse()和str_detect()来定义分组变量。

library(stringr)samples = c('tumor1', 'tumor2', 'tumor3', 'normal1', 'normal2', 'normal3')k1 = str_detect(samples, 'tumor'); k1#  TRUE  TRUE  TRUE FALSE FALSE FALSEifelse(k1, 'tumor', 'normal')# "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"
# 将以上代码用管道符%>%连接c('tumor1', 'tumor2', 'tumor3', 'normal1', 'normal2', 'normal3') %>% str_detect('tumor') %>% ifelse('tumor', 'normal')
# 如果将k1中的检测对象tumor改成normal,那么输出的逻辑值就是反的k2 = str_detect(samples, 'normal'); k2# FALSE FALSE FALSE TRUE TRUE TRUE# 如果此时运行下一条代码,得到的结果是和上述结果相反 ifelse(k2, 'tumor', 'normal')# "normal" "normal" "normal" "tumor" "tumor" "tumor"
# 要想得到正常顺序的结果,那么代码中的两个分组变量也需要反过来ifelse(k2, 'normal', 'tumor')# "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"

多个条件

在R中通常需要根据多个条件来进行判断,并执行对应的代码,因此就需要更高等的函数或者方法。

if else if梯子:

x 10
if (x < 5) { cat("x is less than 5")} else if (x >= 5 && x < 10) { cat("x is between 5 and 10")} else if (x >= 10) { cat("x is greater than or equal to 10")} else { cat("x is not a valid number")}
# x is greater than or equal to 10

由于if else if的代码格式过于复杂,可以使用case_when函数。

case_when()

library(dplyr)i = 8case_when(i > 0 ~ '+',         i < 0 ~ '-',         T ~ '0')

循环语句

for循环 的基本逻辑就是,从一个数据集中逐个提取出元素,然后按照条件进行判断,最后输出结果。如下图所示。

# 代码示例for (i in 1:8) {    print(i)}# 输出结果[1] 1[1] 2[1] 3[1] 4[1] 5[1] 6[1] 7[1] 8

利用for循环,我们可以批量安装r包。

# 先将需要安装的r包放到一个向量中pks = c('ggplot2', 'stringr', 'dplyr')for (i in pks){    if(!require(i, character.only = T))        install.packages(i, ask = F, update = F)}"""1. 判断是否下载安装了某个包,返回逻辑值对象,    赋值为`TRUE`或者`FALSE`,并给出提示信息;2. 如果已经安装了就加载包,发挥`library`的作用。"""

apply()函数

此外,针对数据框和矩阵,我们也能够利用特定的函数(apply)来进行逐行或者逐列的计算。

  • 操作的数据框或者矩阵;

  • MARGIN为1表示行,为2表示列;

  • FUN是函数。

x 20, nrow = 4, ncol = 5)'''     [,1] [,2] [,3] [,4] [,5][1,]   20   20   20   20   20[2,]   20   20   20   20   20[3,]   20   20   20   20   20[4,]   20   20   20   20   20'''apply(x, 1






请到「今天看啥」查看全文