从我们
生信技能树
历年的几千个马拉松授课学员里面募集了一些优秀的创作者,某种意义来说是传承了我们生信技能树的知识整理和分享的思想!
今天的是三周合计15天的数据挖掘授课学员一点一滴整理的授课知识点笔记哦,还有互动练习题哈,欢迎大家点击文末的阅读原文去关注我们学员的公众号哦!
在R语言中,条件语句和循环语句是控制流的重要组成部分,它们对于编写灵活且动态的程序至关重要。
条件语句
条件语句允许程序根据特定条件执行不同的代码块。在R语言中,常用的条件语句包括
if
、
ifelse()、case_when()
和
switch()
。
if
1. 在满足一个指定的条件时,执行一段代码。满足条件时为TRUE,之后if后面的代码,不满足时跳过执行。
i = 8
if (i > 0 ) { print("i是正数")}
# i是正数
2. 通常if与else连用,以此来应对更多的情况。
i = -8
if (i > 0){print('i是正数')} else {print('i不是正数')}
3. if还可以与else if组合。
i = 0
if (i > 0) {
print('i是正数')
} else if (i == 0) {
print('i等于0')
} else (i < 0) {
print('i是负数')
}
ifelse()函数
ifelse是一个向量化的函数,可以同时对多个条件进行判断,并返回相应的值。它不需要像
if
那样嵌套,使得代码更加简洁。它的语法是:
ifelse(test, yes, no)
i = 8
ifelse(i>0, "i是正数", "i不是正数")
在转录组实战中,可以利用ifelse()和str_detect()来定义分组变量。
library(stringr)
samples = c('tumor1', 'tumor2', 'tumor3', 'normal1', 'normal2', 'normal3')
k1 = str_detect(samples, 'tumor'); k1
ifelse(k1, 'tumor', 'normal')
c('tumor1', 'tumor2', 'tumor3', 'normal1', 'normal2', 'normal3') %>%
str_detect('tumor') %>%
ifelse('tumor', 'normal')
k2 = str_detect(samples, 'normal'); k2
ifelse(k2, 'tumor', 'normal')
ifelse(k2, 'normal', 'tumor')
多个条件
在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 = 8
case_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包。
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