获取Github代码包以及准备工作

先下载代码包

github代码在:https://github.com/jmzeng1314/scRNA_smart_seq2/archive/master.zip

首先进入RNA-seq目录,从step0-step9是对常规转录组的一个回顾

准备工作之R包

从step0开始,代码注释蛮详细的,我会挑选重要的部分写到这里,其他可以自行看代码学习,下面就是主要利用Rstudio进行操作了

  • 一个好习惯,做新项目时记得清空之前的变量,使用rm(list = ls())

  • 有的R包比较大,经常需要加载其他的动态库dynamically loaded libraries (DLLs),例如:

    > length(loadedNamespaces())
    [1] 34
    > library(Seurat) #加载一个seurat包会出现接近60个依赖的动态库
    > length(loadedNamespaces())
    [1] 96

    如果不设置,就会因为加载数量超限制而报错(https://developer.r-project.org/Blog/public/2018/03/23/maximum-number-of-dlls/)

    在R3.3版本中,只能有100个固定的动态库限制,到了3.4版本以后,就能够使用Sys.setenv(R_MAX_NUM_DLLS=xxx)进行设置,而这个数字根据个人情况设定

  • 在新建数据框时会自动将字符串的列当做是因子型向量,但是我们常常还需要对字符进行修改,因此需要先将这个设置取消:options(stringsAsFactors = F)

  • 因为Bioconductor下载方法的变动,要学会使用BiocManager::install这个命令,例如:BiocManager::install(c( 'scran'),ask = F,update = F),新加的两个选项表示:不要问我要不要下载,直接下!还有不要问我要不要更新,不更新!【除非不升级就报错】

  • 下载包存在网络的限制,毕竟R语言是国外开发,因此可以通过options()$repos看看常规CRAN安装R包的使用镜像(一般情况下是rstudio公司的),但是这里我们可以自行设置:比如设置成清华源:options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")),另外Bioconductor也有自己的镜像设置:修改一下options即可,options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")

    # 总结一下,可以先用if判断再进行设置
    if(length(getOption("CRAN"))==0) options(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")

    if(!require("BiocManager")) install.packages("BiocManager",update = F,ask = F)

    if(length(getOption("BioC_mirror"))==0) options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")

  • 如何使用if判断语句进行包的安装

    if (!requireNamespace("BiocManager", quietly = TRUE))
     install.packages("BiocManager")

最后,就是安装所有必备的R包(包括CRAN和Bioconductor)

# 快速安装cran包
cran_pkgs <- c("ggfortify","FactoMineR","factoextra")
for (pkg in cran_pkgs){
 if (! require(pkg,character.only=T) ) {
   install.packages(pkg,ask = F,update = F)
   require(pkg,character.only=T)
  }
}
# Bioconductor包
library(BiocManager)
bioc_pkgs <- c("scran","TxDb.Mmusculus.UCSC.mm10.knownGene","org.Mm.eg.db","genefu","org.Hs.eg.db","TxDb.Hsapiens.UCSC.hg38.knownGene")
for (pkg in bioc_pkgs){
 if (! require(pkg,character.only=T) ) {
   BiocManager::install(pkg,ask = F,update = F)
   require(pkg,character.only=T)
  }
}

目的:利用R包重复文章的基因数量图、聚类图、基因在聚类图中的热图、每个基因表达量在不同cluster的小提琴图

准备工作之表达矩阵

看到文章中有两个表达矩阵,其中第一个是原始表达矩阵(均为整数),第二个是rpkm是表达量归一化后的值(包含了小数),因此也能说明为何第二个文件比第一个要大。

RPKM这个指标可以这样理解:R表示reads,K表示基因长度,M表示文库大小,它实际上做的事情也就是去掉基因长度和测序文库的差异对reads比对数量的影响

好,先说说为什么要去掉文库大小差异:以这篇文章中的图片为例:https://sci-hub.tw/https://doi.org/10.1186/s13059-018-1466-5

比如有两个样本,要比较三个基因ABC的表达量,图中越高表示比对到这个基因的reads数越多,因此在同一个样本中可以看到C>B>A,但是不同的两个样本呢?

测序量不同,比大小是不公平的

举个夸张的例子:上面👆的样本(简称"样本1")中一共比对了100万条reads,其中C基因比对到了100条;下面👇的样本(简称"样本2")中一共比对了100条reads,其中C基因比对了10条。虽然最终的数据显示:样本1中C基因比样本2的C基因比对reads数多了90条,但是考虑到实际样本情况就是,样本2中C基因可是占据了总比对量的十分之一,而样本1呢?很小很小…。因此去掉M(也就是每个样本的测序文库大小,以Million为单位)的影响,才是比较客观的。

同样的,有的基因长,有的基因短,开发RPKM的人就想:基因长的比对到的reads也会更多,因此也去掉了这个差异(除以K)

但是!这个概念目前在统计上是错误的,因此并不建议使用这个指标

操作表达矩阵

    读取    

# 保留头信息,并设置分隔符为制表符tab
a=read.table('../GSE111229_Mammary_Tumor_fibroblasts_768samples_rawCounts.txt.gz',header = T ,sep = '\t')

# 读进来以后,简单查看一下
a[1:6,1:4]

    过滤    

可以看到很多基因对应的表达量都是0

下面会用到循环,但是为了方便理解,先拿其中一行为例:

x=a[1,] #比如将第一行提取出来赋值给x
# 将x中的值与1作比较(利用了R语言的循环补齐,也就是说,它会将768个值一个一个去和1做比较,然后返回逻辑值TRUE或者FALSE)
x>1
# 然后利用table()函数检查x中有多少是TRUE,多少是FALSE
table(x>1)
# FALSE TRUE
#   766     2
# 可以看到第一行这个基因在768个细胞中只有两个细胞有表达,我们认为:这两个细胞也不好分组,cluster聚类也没有什么意义,因此可以去掉
# 但是这个细胞量设置成多少合适呢?总不能不能一股脑全设成2吧
floor(ncol(a)/50) # 用总列数除以50然后向下取整,结果就是15
# 也就是说,只要一行中至少要在15个样本中有表达量
# 上面知道了 x>1 返回逻辑值0和1,0为FALSE,1为TRUE。现在我们要找一行中总共有多少TRUE,就用sum计算一下(因为会忽略掉0的影响)
sum(x>1) > floor(ncol(a)/50)
# 当然第一行会返回FALSE,也就表明我们要去掉这一行内容
a[sum(x>1) > floor(ncol(a)/50),]# 就把不符合要求的第一行去掉了

上面,我们对一行的筛选与过滤有了认识,那么一个表达矩阵有2万多行,怎样实现循环操作呢?

# 专业的事情交给专业的工具去处理=》apply
# 要使用apply函数先要明白三个问题:对谁进行操作?对行还是列进行操作?操作什么?
apply(a, 1, function(x) {sum(x>1) > floor(ncol(a)/50)})
# 1:对a这个矩阵进行操作
# 2:对行(也就是1表示)进行操作[补充:如果对列操作,用2表示]
# 3:操作什么?复杂的操作先写上 function(x){},这是一个标准格式,然后大括号中是要进行操作的函数,于是我们就可以将我们之前写的那一行粘到这里,最后仍然是逻辑值

最后,有多少行就会返回多少个apply判断的逻辑值,显示FALSE的就是要过滤掉的,于是再用行筛选完成整个操作,并赋值给一个新变量:

dat=a[apply(a,1, function(x) sum(x>1) > floor(ncol(a)/50)),]
dim(dat)
# 12198   768 最终就保留了12198个基因

其实原文保留的更少,原文只有10835个基因

(0)

相关推荐

  • 这些新开发的R包尝起来确实鲜

    写在前面 翻了翻最近一年来cran上的R包,找了一些对我们很有用的,让当然看不完,进行了简单的了解,这里送给大家,看看是否可以帮助自己做好数据呢? ClinReport 提供输出wrd格式的表格,这个 ...

  • R包的安装与更新

    一.R包的安装 0. 设置镜像 R和bioconductor的主服务器都在国外,设置镜像加快下载速度. ## ====修改镜像====options(repos=c(CRAN="https: ...

  • 手把手教你下载TCGA数据(代码+视频+答疑+服务)

    现在TCGA数据下载的代码满天飞,例如以使用TCGAbiolinks下载为例: if (!requireNamespace("BiocManager", quietly = TRU ...

  • 玩转R包

    很长一段时间,总是被安装一些包所绊住,或许今天也是.往往小阴沟就会翻船.死都不敢相信自己是这么死的.R包就是众多坑沟中的臭名昭著的一个.版本不对,依赖不存在,各种问题简直让一个有强迫症的患者生不如死. ...

  • 【R分享|实战】 新手福利~R包的安装与使用

    " 也许那是过去的你,你无法改变,但现在的你能够变得强大."   --科白君 "R实战"专题·第2篇   编辑 | 科白维尼   4445字 | 7分钟阅读 本 ...

  • 直击热点,巧用ssGSEA进行免疫浸润分析

    关于免疫浸润分析,可谓是最近一段时间的热点,很多文章基于肿瘤免疫细胞微环境进行分析,不管是进行下游基因筛选也好,还是构建诊断模型也好,发表了很多相关的研究.在前面关于<CIBERSORT在免疫浸 ...

  • 牛逼!这个工具可以直接浏览 GitHub 代码

    小白带你学编程 前天 "看 GitHub 代码" 这件事上,还在网页上点点点? 用开发工具看代码,不香吗? 于是,它来了,它来了--可以直接用VS Code方式打开GitHub代码 ...

  • 用 VS Code 直接浏览 GitHub 代码

    "看 GitHub 代码" 这件事上,还在网页上点点点? 用开发工具看代码,不香吗? 于是,它来了,它来了--可以直接用VS Code方式打开GitHub代码的工具. 而且在短短几 ...

  • 封装Python代码包的六个步骤!现在就记住

    https://m.toutiao.com/is/JERVR1h/ 全文共7134字,预计学习时长14分钟 假设你很喜欢用同一段Python代码,里面有几个相关的小型函数,或者是含有几百行代码的中型模 ...

  • GitHub代码一键转VS Code:只需 1s

    作者丨杜伟 来源丨机器之心 编辑丨极市平台 极市导读 被微软收购后的 GitHub,正在变得越来越易用,现在又有人把它和「宇宙第一 IDE」VS Code 紧密联系起来了. >>加入极市C ...

  • GitHub代码一键转VS Code,太好用了!

    作为程序员常用的代码编辑器之一,VS Code 是一个可在所有平台上使用的开源.可扩展和轻量级的编辑器.这些品质使其大受欢迎,并成为 Python 开发的绝佳平台. 那么,有没有可能提供 GitHub ...

  • 献给 Python 开发人员的 25 个最佳 GitHub 代码库!

    以下为译文: 根据2020年StackOverflow开发者调查报告,Python是世界上最受欢迎的语言之一,排名仅次于Rust和TypeScript.更令人惊讶的是,Python是开发人员最想尝试的 ...

  • 微信有个开关,可以获取海量表情包,再也不用收藏添加表情了

    分享生活小妙招,共享科技新生活!大家好,欢迎来到今天的知识分享!我是你们的好朋友小俊! 我们在使用微信的时候,经常会收到好友给我们发送的各种各样的表情,那么有些表情呢非常好看非常有个性. 但是我们想找 ...

  • 什么,3行Python代码就能获取海量数据?

    Python爬虫与数据挖掘 1周前 以下文章来源于法纳斯特 ,作者小F 本文转载自公众号[法纳斯特],详情可以点击上方卡片,关注该公众号,获取更多好文推荐. 一谈起数据分析,首先想到的就是数据,没有数 ...

  • 在 GitHub 上提交代码必备指南!

    [CSDN 编者按]你是否经常参与开源项目?如果在 GitHub 上参与开源项目的 Pull Request,你知道正确的做法是什么吗?别担心,本文为你准备了详细的指南,希望对你有一定裨益. 作者 | ...