《Bioinformatics Data Skills》據(jù)說是入門生信的必備書之一旋炒。最近抽了點(diǎn)時(shí)間看杨拐,發(fā)現(xiàn)里面的確有很多有意思的騷操作和建議厘唾。我這里簡(jiǎn)略地列出一些有意思的地方以及其對(duì)應(yīng)的章節(jié)目錄唬格,大家感興趣地可以去對(duì)應(yīng)章節(jié)看。當(dāng)然仓坞,時(shí)間充裕的話背零,建議大家讀整本書。
Charpter 1
-
Write Code for Humans, Write Data for Computers 即代碼要盡可能地寫的友好一點(diǎn)无埃,要考慮到以后的你和其他人還看不看得懂捉兴。但對(duì)應(yīng)的蝎困,你所輸出的格式必須要讓計(jì)算機(jī)能夠讀取,即要符合一定的規(guī)范倍啥。
關(guān)于代碼的規(guī)范,作者給出了google的public style guides for many languages 這一編程范式澎埠。
-
Make Assertions and Be Loud, in Code and in Your Methods 即我們?cè)趯懗绦虻臅r(shí)候虽缕,要將報(bào)錯(cuò)也考慮在內(nèi)。這樣萬一出錯(cuò)的時(shí)候蒲稳,就可以返回報(bào)錯(cuò)信息氮趋。關(guān)于返回報(bào)錯(cuò)信息,我們可以嘗試用 Assertions江耀。
幾乎每個(gè)語(yǔ)言都會(huì)有自己的assert function剩胁。Python里面是assert(),而R里面是 stopifnot()
Use Existing Libraries Whenever Possible 即盡量地用現(xiàn)成的庫(kù)去完成你的任務(wù)祥国,因?yàn)楝F(xiàn)成的庫(kù)已經(jīng)發(fā)表了好久昵观,也有很多人去使用并幫助debug。如果是自己寫的話舌稀,可能會(huì)沒有考慮到一些問題啊犬。就比如一個(gè)簡(jiǎn)單的核酸轉(zhuǎn)蛋白的程序,我們可能只會(huì)考慮ATCG的核酸序列壁查。但實(shí)際上觉至,序列中還會(huì)存在NYW等。NYW這些字符都是在International Union of Pure and Applied Chemistry(IUPAC)里面的睡腿,是一些standard ambiguous nucleotides语御。
Treat Data as Read-Only 即最好你產(chǎn)生的數(shù)據(jù)都是只讀的,你的后續(xù)分析都不是去修改數(shù)據(jù)席怪,而是產(chǎn)生新的文件应闯。這樣對(duì)以后重新檢查、重復(fù)分析流程等都會(huì)有幫助何恶。
Recommendations for Reproducible Research 對(duì)于一個(gè)可重復(fù)的分析來說孽锥,document 是至關(guān)重要的,即嘗試寫README细层。我們應(yīng)該學(xué)會(huì)在document加上軟件惜辑、數(shù)據(jù)等相關(guān)信息。比如說軟件的版本疫赎,數(shù)據(jù)是從哪里下的盛撑,數(shù)據(jù)的下載日期。如果可以的話捧搞,最好能在分析流程里面將結(jié)果圖也放上去抵卫,便于你或者其他人后續(xù)的重復(fù)狮荔。R’s knitr和iPython 都可以幫助我們做到這一點(diǎn)。
Chapter 2
-
Project Directories and Directory Structures 在寫一個(gè)腳本的時(shí)候介粘,盡量用相對(duì)路徑殖氏。這樣,你的腳本不管放哪里姻采,都可以運(yùn)行了雅采。
關(guān)于相對(duì)路徑和絕對(duì)路徑這一點(diǎn),我覺得是仁者見仁慨亲,智者見智的婚瓜。
-
shell expansion 中有一種brace expansion可以快速地創(chuàng)建結(jié)構(gòu)化的文件
$ echo dog-{gone,bowl,bark} dog-gone dog-bowl dog-bark $ mkdir -p zmays-snps/{data/seqs,scripts,analysis} $ touch seqs/zmays{A,B,C}_R{1,2}.fastq $ ls seqs/ zmaysA_R1.fastq zmaysB_R1.fastq zmaysC_R1.fastq zmaysA_R2.fastq zmaysB_R2.fastq zmaysC_R2.fastq $ touch zmays{A..C}_R{1,2}.fastq $ ls *.fastq zmaysA_R1.fastq zmaysB_R1.fastq zmaysC_R1.fastq zmaysA_R2.fastq zmaysB_R2.fastq zmaysC_R2.fastq
-
Wildcards(通配符)也是一種shell expansion,通配符最常見的語(yǔ)法是
* 代表任意數(shù)量的字符(但會(huì)忽略 .bashrc 這種點(diǎn)號(hào)開頭的隱藏文件)
? 代表單個(gè)字符
-
[A-Z] 可以匹配方括號(hào)里面的任意一個(gè)字符(比如[aeiou])刑棵,也可以匹配A-Z這26個(gè)大寫字母([start-end]這種連續(xù)范圍)巴刻,也可以匹配0-9這種數(shù)字。但需要注意的是蛉签,匹配的是含有字母或數(shù)字的字符串胡陪。
按作者所說,snps_10.txt, snps_11.txt, snps_12.txt 這種是不能用snps_[10-13].txt 來匹配的正蛙,如果想要匹配的話督弓,就要用brace expansion來做。即snps_{10..13}.txt 乒验。不過R1愚隧,R2,R3這種還是可以正常匹配的锻全。
$ touch snps_{10..13}.txt $ ls *.txt snps_10.txt snps_11.txt snps_12.txt snps_13.txt $ ls snps_[10-13].txt ls: cannot access 'snps_[10-13].txt': No such file or directory $ ls snps_{10..13}.txt snps_10.txt snps_11.txt snps_12.txt snps_13.txt
關(guān)于通配符狂塘,發(fā)現(xiàn)一篇阮一峰的命令行通配符教程
-
OS 和 linux 系統(tǒng)對(duì)于命令的參數(shù)數(shù)目(更準(zhǔn)確來說是命令的長(zhǎng)度)實(shí)際上是有限制的。這種“Argument list too long” 通常會(huì)出現(xiàn)在你用通配符匹配了太多的文件鳄厌。
這種解決方法在書的后面也提到了荞胡。
-
我們可以用0021而非21來命名,這樣在后續(xù)排序的時(shí)候會(huì)有好處了嚎。
$ ls -l -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-1.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-11.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-12.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-13.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:24 genes-14.txt $ ls -l -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-001.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-002.txt [...] -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-013.txt -rw-r--r-- 1 vinceb staff 0 Feb 21 21:23 genes-014.txt
所以你能看見像一些大的Project比如Ensemble泪漂,就是采取這種命名方式:ENSG00000164256