單細胞轉(zhuǎn)錄組學習筆記-4-獲取Github代碼包以及準備工作

劉小澤寫于19.6.14-15-第二單元第二蒜危、三講:獲取Github代碼包以及準備工作

筆記目的:根據(jù)生信技能樹的單細胞轉(zhuǎn)錄組課程探索smart-seq2技術(shù)相關(guān)的分析技術(shù)
課程鏈接在:http://jm.grazy.cn/index/mulitcourse/detail.html?cid=53

先下載代碼包

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

首先進入RNA-seq目錄辐赞,從step0-step9是對常規(guī)轉(zhuǎn)錄組的一個回顧

準備工作之R包

從step0開始响委,代碼注釋蠻詳細的晃酒,我會挑選重要的部分寫到這里贝次,其他可以自行看代碼學習彰导,下面就是主要利用Rstudio進行操作了

  • 一個好習慣位谋,做新項目時記得清空之前的變量,使用rm(list = ls())

  • 有的R包比較大笋轨,經(jīng)常需要加載其他的動態(tài)庫dynamically loaded libraries (DLLs)爵政,例如:

    > length(loadedNamespaces()) 
    [1] 34
    > library(Seurat) #加載一個seurat包會出現(xiàn)接近60個依賴的動態(tài)庫
    > length(loadedNamespaces())
    [1] 96
    

    如果不設置,就會因為加載數(shù)量超限制而報錯(https://developer.r-project.org/Blog/public/2018/03/23/maximum-number-of-dlls/)

    在R3.3版本中洁灵,只能有100個固定的動態(tài)庫限制徽千,到了3.4版本以后汤锨,就能夠使用Sys.setenv(R_MAX_NUM_DLLS=xxx)進行設置,而這個數(shù)字根據(jù)個人情況設定

  • 在新建數(shù)據(jù)框時會自動將字符串的列當做是因子型向量荠诬,但是我們常常還需要對字符進行修改柑贞,因此需要先將這個設置取消:options(stringsAsFactors = F)

  • 因為Bioconductor下載方法的變動聂抢,要學會使用BiocManager::install這個命令琳疏,例如:BiocManager::install(c( 'scran'),ask = F,update = F)空盼,新加的兩個選項表示:不要問我要不要下載,直接下台汇!還有不要問我要不要更新篱瞎,不更新!【除非不升級就報錯】

  • 下載包存在網(wǎng)絡的限制俐筋,畢竟R語言是國外開發(fā)牵素,因此可以通過options()$repos看看常規(guī)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/")

    # 總結(jié)一下请琳,可以先用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包重復文章的基因數(shù)量圖腰奋、聚類圖单起、基因在聚類圖中的熱圖、每個基因表達量在不同cluster的小提琴圖

準備工作之表達矩陣

看到文章中有兩個表達矩陣嘀倒,其中第一個是原始表達矩陣(均為整數(shù)),第二個是rpkm是表達量歸一化后的值(包含了小數(shù))局冰,因此也能說明為何第二個文件比第一個要大测蘑。

RPKM這個指標可以這樣理解:R表示reads,K表示基因長度康二,M表示文庫大小碳胳,它實際上做的事情也就是去掉基因長度和測序文庫的差異對reads比對數(shù)量的影響

好,先說說為什么要去掉文庫大小差異:以這篇文章中的圖片為例:https://sci-hub.tw/https://doi.org/10.1186/s13059-018-1466-5

比如有兩個樣本沫勿,要比較三個基因ABC的表達量挨约,圖中越高表示比對到這個基因的reads數(shù)越多,因此在同一個樣本中可以看到C>B>A产雹,但是不同的兩個樣本呢诫惭?

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

舉個夸張的例子:上面??的樣本(簡稱"樣本1")中一共比對了100萬條reads蔓挖,其中C基因比對到了100條共缕;下面??的樣本(簡稱"樣本2")中一共比對了100條reads惕橙,其中C基因比對了10條。雖然最終的數(shù)據(jù)顯示:樣本1中C基因比樣本2的C基因比對reads數(shù)多了90條汹来,但是考慮到實際樣本情況就是利耍,樣本2中C基因可是占據(jù)了總比對量的十分之一睬愤,而樣本1呢待榔?很小很小…屁使。因此去掉M(也就是每個樣本的測序文庫大小,以Million為單位)的影響匆瓜,才是比較客觀的咽扇。

同樣的,有的基因長陕壹,有的基因短,開發(fā)RPKM的人就想:基因長的比對到的reads也會更多树埠,因此也去掉了這個差異(除以K)

但是糠馆!這個概念目前在統(tǒng)計上是錯誤的,因此并不建議使用這個指標

操作表達矩陣

讀取

# 保留頭信息怎憋,并設置分隔符為制表符tab
a=read.table('../GSE111229_Mammary_Tumor_fibroblasts_768samples_rawCounts.txt.gz',header = T ,sep = '\t')

# 讀進來以后又碌,簡單查看一下
a[1:6,1:4]

過濾

可以看到很多基因?qū)谋磉_量都是0

下面會用到循環(huán)九昧,但是為了方便理解,先拿其中一行為例:

x=a[1,] #比如將第一行提取出來賦值給x
# 將x中的值與1作比較(利用了R語言的循環(huán)補齊毕匀,也就是說铸鹰,它會將768個值一個一個去和1做比較,然后返回邏輯值TRUE或者FALSE)
x>1
# 然后利用table()函數(shù)檢查x中有多少是TRUE皂岔,多少是FALSE
table(x>1)
# FALSE  TRUE 
#   766     2 
# 可以看到第一行這個基因在768個細胞中只有兩個細胞有表達蹋笼,我們認為:這兩個細胞也不好分組,cluster聚類也沒有什么意義躁垛,因此可以去掉
# 但是這個細胞量設置成多少合適呢剖毯?總不能不能一股腦全設成2吧
floor(ncol(a)/50) # 用總列數(shù)除以50然后向下取整,結(jié)果就是15
# 也就是說教馆,只要一行中至少要在15個樣本中有表達量
# 上面知道了 x>1 返回邏輯值0和1逊谋,0為FALSE,1為TRUE⊥疗蹋現(xiàn)在我們要找一行中總共有多少TRUE胶滋,就用sum計算一下(因為會忽略掉0的影響)
sum(x>1) > floor(ncol(a)/50)
# 當然第一行會返回FALSE,也就表明我們要去掉這一行內(nèi)容
a[sum(x>1) > floor(ncol(a)/50),]# 就把不符合要求的第一行去掉了

上面悲敷,我們對一行的篩選與過濾有了認識究恤,那么一個表達矩陣有2萬多行,怎樣實現(xiàn)循環(huán)操作呢镀迂?

# 專業(yè)的事情交給專業(yè)的工具去處理=》apply
# 要使用apply函數(shù)先要明白三個問題:對誰進行操作丁溅?對行還是列進行操作?操作什么探遵?
apply(a, 1, function(x) {sum(x>1) > floor(ncol(a)/50)})
# 1:對a這個矩陣進行操作
# 2:對行(也就是1表示)進行操作[補充:如果對列操作窟赏,用2表示]
# 3:操作什么?復雜的操作先寫上 function(x){}箱季,這是一個標準格式涯穷,然后大括號中是要進行操作的函數(shù),于是我們就可以將我們之前寫的那一行粘到這里藏雏,最后仍然是邏輯值

最后拷况,有多少行就會返回多少個apply判斷的邏輯值,顯示FALSE的就是要過濾掉的掘殴,于是再用行篩選完成整個操作赚瘦,并賦值給一個新變量:

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

其實原文保留的更少,原文只有10835個基因

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奏寨,一起剝皮案震驚了整個濱河市起意,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌病瞳,老刑警劉巖揽咕,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悲酷,死亡現(xiàn)場離奇詭異,居然都是意外死亡亲善,警方通過查閱死者的電腦和手機设易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛹头,“玉大人顿肺,你說我怎么就攤上這事【蚨” “怎么了挟冠?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長袍睡。 經(jīng)常有香客問我知染,道長,這世上最難降的妖魔是什么斑胜? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任控淡,我火速辦了婚禮,結(jié)果婚禮上止潘,老公的妹妹穿的比我還像新娘掺炭。我一直安慰自己,他們只是感情好凭戴,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布涧狮。 她就那樣靜靜地躺著,像睡著了一般么夫。 火紅的嫁衣襯著肌膚如雪者冤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天档痪,我揣著相機與錄音涉枫,去河邊找鬼。 笑死腐螟,一個胖子當著我的面吹牛愿汰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乐纸,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼衬廷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汽绢?” 一聲冷哼從身側(cè)響起泵督,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庶喜,沒想到半個月后小腊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡久窟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年秩冈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斥扛。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡入问,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稀颁,到底是詐尸還是另有隱情芬失,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布匾灶,位于F島的核電站棱烂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阶女。R本人自食惡果不足惜颊糜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秃踩。 院中可真熱鬧衬鱼,春花似錦、人聲如沸憔杨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽消别。三九已至抛蚤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妖啥,已是汗流浹背霉颠。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荆虱,地道東北人蒿偎。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像怀读,于是被迫代替她去往敵國和親诉位。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容