前情提要:今天不咕咕咕 健身完以后来学习
part four来到function的高级应用部分
目录
首先就是Lapply函数
目标:批量计算基因和免疫浸润的关系
载入数据:一个是样本的基因表达情况,一个是样本的免疫浸润情况
rm(list = ls())
load(file = "data/expr_immu_BRCA.Rdata")
1.for循环代码
test1 <- expr_data[1:10,1:10];test1
test2 <- immu_data[1:10,1:10];test2
### 基因和免疫浸润的相关性分析
gene <- "KLF5"
y <- as.numeric(expr_data[,gene]) #gene的表达量
### 批量操作的具体实现过程:
### 1.设定容器,最终生成的数据放在什么地方?
correlation <- data.frame()
### 2.批量把数据导出到容器
for(i in 1:length(colnames(immu_data))){
## 1.指示
print(i)
## 2.计算
dd = cor.test(as.numeric(immu_data[,i]),y,method="spearman")
## 3.填充
correlation[i,1] = colnames(immu_data)[i]
correlation[i,2] = dd$estimate
correlation[i,3] = dd$p.value
}
### 修改名称
colnames(correlation) <- c("cell","cor","p.value")
结果如下
2.Lapply
### 第1,写出单次处理的function
mycor = function(x){
dd = cor.test(as.numeric(immu_data[, x]),y,method ="spearman",exact=FALSE)
data.frame(cell=x,cor=dd$estimate,p.value=dd$p.value)
}
### 测试函数功能
mycor("Activated B cell")
### 第2步lapply批量作用于函数,返回list
lapplylist = lapply(colnames(immu_data),mycor)
sapplylist = sapply(colnames(immu_data),mycor)
str(lapplylist)
str(sapplylist)
sapplylist[,1]
### 第3步do.call 转换list
cor_data <- do.call(rbind,lapplylist)
lapplylist:
cor_data:
3.Sapply呢
在上一步的环节中有一个sapplylist,其实是在利用sapply的返回格式
sapplylist:
两个list的形式不同:
sapply整合了28*3个list,并且看起来就很像数据框,于是变换一下
sapplylist <- as.data.frame(sapplylist)
变换成功,但并不是我们画图喜欢的格式,没有关系,转换一下就好了
sapplylist <- t(sapplylist)
4.do.call()
将list按照一定的顺序去合并,第一个参数是函数,如rbind或者cbind;第二个参数是内容
lapply常常要和do.call连用!!!!!
5.绘图
6.一步走
cor_data <- do.call(rbind,lapply(colnames(immu_data),function(x){
dd = cor.test(as.numeric(immu_data[,x]),y,method ="spearman",exact=FALSE)
data.frame(cell=x,cor=dd$estimate,p.value=dd$p.value)
}))
测试数据请发邮件yunbk@mail2.sysu.edu.cn获取