美文网首页生信分析R语言R
【R语言】For 循环在科研中应用的小例子

【R语言】For 循环在科研中应用的小例子

作者: 巩翔宇Ibrahimovic | 来源:发表于2022-02-03 20:51 被阅读0次

写在前面
如果能掌握批量分析的技能,相信会对你的科研生活产生重大的影响。个数越大,循环越有用。当然了,如果手里只有十几二十个样本,且对循环不太熟悉的话,逐一操作的时间也许小于写循环的时间。
用好批量处理,横扫多数据样本。本次分享来自GZ07系列课程。

1.For循环和if判断的模式

For循环

for (variable in vector) {
  action(variable)
}

if判断

if (condition) {
  action
} else {
  action
}

总的来说,要分清小括号和大括号。

1.1 利用循环判断癌和癌旁组织

可以查看这个链接对TCGA的数据有个浅显的认识。https://mp.weixin.qq.com/s/Ph1O6V5RkxkyrKpVmB5ODA

### 加载数据
rm(list=ls())
load(file = "data/TCGA_ggplot.Rdata")
 
### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求
#单次操作的实现
substring(metadata[1,1],14,15)

这里补充一下substring的用法。

  • Description
    Extract or replace substrings in a character vector.

  • Usage
    substr(x, start, stop)
    substring(text, first, last = 1000000L)
    substr(x, start, stop) <- value
    substring(text, first, last = 1000000L) <- value

  • Arguments

x, text      a character vector.

start, first   integer. The first element to be replaced.

stop, last   integer. The last element to be replaced.

value      a character vector, recycled if necessary.
批量操作的具体实现过程:

### 1.创建容器
metadata <- data.frame(TCGA_id=rownames(exprSet)) 
### 2.循环输出内容到容器
for (i in 1:nrow(metadata)) {
  ## 指示,打印变量的目的是方便查看数据报错的位置
  print(i)
  ## substring的用法,这是元素获取,如果不转换成numeric的话,substring提取出来的是character。
  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.2 单基因的批量相关性分析

这个技能对于未知功能的基因特别有用,可以通过相关性分析将未知功能的基因和已知功能的基因发生联系,从而确定未知基因的功能。

### 加载数据
load(file = "data/TCGA_BRCA_exprSet_plot.Rdata")
test <- exprSet[1:10,1:10]

### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求
geneA = as.numeric(exprSet[,"FOXA1"]) #按列名提取数据
geneB = as.numeric(exprSet[,"ESR1"])
cor.test(geneA,geneB,method="spearman")
### 眼睛看到还不行,需要能够提取
dd = cor.test(geneA,geneB,method="spearman")
### 1.相关性系数
dd$estimate
### 2.p值
dd$p.value

批量循环的最终实现过程

##1.设定容器,最终生成的数据放在什么地方?
correlation <- data.frame()

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

##3.获取批量操作的范围,应该是个向量
genelist <- colnames(data)

##4.开始for循环,数据导出到容器
gene <- "FOXA1"
genedata <- as.numeric(data[,gene])
#nrow针对data.fram,length针对character。
for(i in 1:length(genelist)){
  ## 1.指示
  print(i)
  ## 2.计算
  dd = cor.test(genedata,as.numeric(data[,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")

友情链接:
1.单基因批量相关性分析的妙用:https://mp.weixin.qq.com/s/TfE2koPhSkFxTWpb7TlGKA
2.单基因批量相关性分析的GSEA
https://mp.weixin.qq.com/s/sZJPW8OWaLNBiXXrs7UYFw

1.3 批量名称转换

## 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求

term = as.character(hallmarks$term[1])
### 1.裂解
term = unlist(strsplit(term, split="_", fixed=T))[-1] #-1代表去掉第一个character
### 2.空格连接
term = paste(term, collapse=" ")
term

容器已经存在,直接批量循环输出

hallmarks$term <- as.character(hallmarks$term)
for(i in 1:nrow(hallmarks)){
  print(i)
  term = hallmarks$term[i]
  ### 1.裂解
  term = unlist(strsplit(term, split="_", fixed=T))[-1]
  ### 2.空格连接
  term = paste(term, collapse=" ")
  ### 3.数据导出
  hallmarks$term[i] = term
}

1.4 统计这些基因在显著富集通路中的次数

这个功能比富集分析更有用,能够知道某个基因可能参与了不同的通路,这有可能是最重要的一些基因。

library(clusterProfiler)
dotplot(symboldata)
barplot(symboldata)

### 转换为数据框
symboldata  <- as.data.frame(symboldata )

### 1.首先确定框架,我们想重复的操作是什么?
### 2.单次操作应该如何做
### 3.如何用R语言实现单次的需求


### 修改其中一个
test = symboldata$geneID[1]
test
### 需要裂解
unlist(strsplit(test,split = "/"))


### 1.创建容器,此处是向量
splitvector <- c()
### 2.循环操作导出到容器
for(i in 1:length(symboldata$geneID)){
  print(i)
  new = unlist(strsplit(symboldata$geneID[i],split = "/"))
  splitvector = c(splitvector,new)
}

### 统计频次
table(splitvector)
### 排序
sortdata = sort(table(splitvector),decreasing = T)
### 成数据框来查看
test <- as.data.frame(sortdata)

参考:
果子学生信

相关文章

  • 【R语言】For 循环在科研中应用的小例子

    写在前面如果能掌握批量分析的技能,相信会对你的科研生活产生重大的影响。个数越大,循环越有用。当然了,如果手里只有十...

  • R语言绘图板块

    在偶然间接触了R语言,并且渐渐开始应用到实际的科研工作中,越发体会到它的深邃,正如有人说R语言的学习曲线是陡峭的。...

  • R可视化之美之科研绘图-09.R语言中的表达式、数学公式、特殊符

    本内容为【科研私家菜】R可视化之美之科研绘图系列课程,快来收藏关注【科研私家菜】 01 R语言表达式 在R语言中,...

  • R purrr_ for循环与函数式编程

    for 循环在R中不像其他语言中那么重要,因为R是一门函数式编程的语言。这意味着可以先将for 循环封装在函数里面...

  • 可视化也需要赛博朋克

    分享R中创建CyberPunk的小例子,喜欢的小伙伴可以关注我的公众号R语言数据分析指南[https://mp.w...

  • 作图相关

    R语言-循环产生变量名并赋值,应用到 ggolot2 循环作图:https://www.cnblogs.com/J...

  • R语言在股票分析中的应用

    R语言简介: 1992年,Ross Ihaka 和 Robert Gentleman 两个人在S语言(贝尔实验室开...

  • R语言for循环①

    for循环是一种重复控制结构,可以让您有效地编写一个需要执行特定次数的循环。 示例: 它产生如下结果: 下标访问 ...

  • R语言 循环

    可能有一种情况,当你需要执行一段代码几次。 通常,顺序执行语句。 首先执行函数中的第一个语句,然后执行第二个语句,...

  • R语言:循环

    这里介绍五种R语言的循环语法,分别是: for if repeat which while for if repe...

网友评论

    本文标题:【R语言】For 循环在科研中应用的小例子

    本文链接:https://www.haomeiwen.com/subject/roydkrtx.html