果子老师课程学习总结GZ07R语言批量处理 part one

 前情提要:算是补充基础知识记录

目录

1.for循环 和if语句

 代码一

代码二

 代码三果子

总结:

1.注意了字符串和数值的区别

2.ifelse

3.创造容器

2.批量做基因的相关性分析

代码一果子

代码二:我的思路

总结

cor()

cor.test()

更多情况下可以直接用一些R包绘制相关性的cor_plot

贴两个学习路径



 直接上实战

1.for循环 和if语句

目的:把下列id根据11,12位的数字确定样本位置;即小于等于10为tumor,大于10为normal

 答案对照:

 代码一

for (i in 1:length(metadata$TCGA)) {
  ifelse(substring(metadata$TCGA_id[[i]],14,15)<=10,
         metadata$tissue[[i]] <- "Tumor",
         metadata$tissue[[i]] <- "Normal")
}

代码二

for (i in 1:length(metadata$TCGA)) {
  if (substring(metadata$TCGA_id[[i]],14,15)<=10) {
    metadata$tissue[[i]] <- "Tumor"
  }
else{
  metadata$tissue[[i]] <- "Normal"
}
  }

结果:

 代码三果子

metadata <- data.frame(TCGA_id=rownames(exprSet)) 
### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求
substring(metadata[1,1],14,15)

##########################
### 批量操作的具体实现过程:
### 1.创建容器
metadata <- data.frame(TCGA_id=rownames(exprSet)) 
### 2.循环输出内容到容器
for (i in 1:nrow(metadata)) {
  ## 指示
  print(i)
  ## substring的用法,这是元素获取
  num = as.numeric(substring(metadata[i,1],14,15))
  #如果是肿瘤,就给第2列加上Tumor
  if (num %in% seq(1,9)) {
    metadata[i,2] = "Tumor"
  } 
  #如果是正常组织,就给第2列加上Normal
  if (num %in% seq(10,29)) {
    metadata[i,2] = "Normal"
  } 
}
## 修改名称
colnames(metadata) <- c("TCGA_id","sample")

总结:

代码一和二是我写的,果子的代码看似复杂,但更有条理性

1.注意了字符串和数值的区别

我缺少as.numeric也可以运行,但忽视这种差异吃枣药丸

比如在我和答案比较时就会发现

 这实际上是因为exprSet$sample是因子状态,所以使用identical为F,而直接比较大小则为T

2.ifelse

十分重要的函数

3.创造容器

做循环前一定要有容器,空的也可以

2.批量做基因的相关性分析

查看数据

目的:做两个基因的相关性

因为我的思路一开始和果子的思路不太一样,就先介绍他的代码

代码一果子

为了简化,我对数据精简,只留下十个基因作为示例

###果子
##1.框
correlation <- data.frame()

##2.修剪要循环的数据
data <- exprSet[,-c(1,2,3)]
test <- data[1:10,1:10]

##3.获取批量操作的范围,应该是个向量;以10个基因的test代替data
genelist <- colnames(test)

##4.开始for循环,数据导出到容器
gene <- "COL1A2"
genedata <- as.numeric(test[,gene])

for(i in 1:length(genelist)){
  ## 1.指示
  print(i)
  ## 2.计算
  dd = cor.test(genedata,as.numeric(test[,i]),method="spearman")
  ## 3.填充
  correlation[i,1] = gene
  correlation[i,2] = genelist[i]
  correlation[i,3] = dd$estimate
  correlation[i,4] = dd$p.value
}

colnames(correlation) <- c("gene1","gene2","cor","p.value")

结果:

做一个基因和其它基因的相关性分析,并且导出p和相关性系数

代码二:我的思路

我的想法是,在做两样本的相关性分析/两细胞群的相关性分析时,我们一般把数据排列成行为基因名,列为样本名的形式,做cor()函数即可得到相关的矩阵;现在做两基因的相关性分析,把基因放在列名就可以了呀。正好和函数的样式相一致。

于是我用

genecor <-cor(test, method='spearman')

 

 比较一下和果子的结果

不太懂为什么最后一个是F,但反正可以说两个结果是一致的,但是单一的cor函数难以给出p值

总结

cor()

cor.test()

是两个不同的函数,cor.test可以提供更多的信息

更多情况下可以直接用一些R包绘制相关性的cor_plot

贴两个学习路径

单基因批量相关性分析的妙用
## https://mp.weixin.qq.com/s/TfE2koPhSkFxTWpb7TlGKA
## 单基因批量相关性分析的GSEA
## https://mp.weixin.qq.com/s/sZJPW8OWaLNBiXXrs7UYFw

如需测试数据,请发邮件至yunbk@mail2.sysu.edu.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

18kkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值