《Bioinformatics Data Skills》据说是入门生信的必备书之一。最近抽了点时间看,发现里面的确有很多有意思的骚操作和建议。我这里简略地列出一些有意思的地方以及其对应的章节目录,大家感兴趣地可以去对应章节看。当然,时间充裕的话,建议大家读整本书。
Charpter 1
关于代码的规范,作者给出了google的public style guides for many languages 这一编程范式。
几乎每个语言都会有自己的assert function。Python里面是assert(),而R里面是 stopifnot()
-
Use Existing Libraries Whenever Possible
即尽量地用现成的库去完成你的任务,因为现成的库已经发表了好久,也有很多人去使用并帮助debug。如果是自己写的话,可能会没有考虑到一些问题。就比如一个简单的核酸转蛋白的程序,我们可能只会考虑ATCG的核酸序列。但实际上,序列中还会存在NYW等。NYW这些字符都是在International Union of Pure and Applied Chemistry(IUPAC)里面的,是一些standard ambiguous nucleotides。
-
Treat Data as Read-Only
即最好你产生的数据都是只读的,你的后续分析都不是去修改数据,而是产生新的文件。这样对以后重新检查、重复分析流程等都会有帮助。
-
Recommendations for Reproducible Research
对于一个可重复的分析来说,
document
是至关重要的,即尝试写
README
。我们应该学会在document加上软件、数据等相关信息。比如说软件的版本,数据是从哪里下的,数据的下载日期。如果可以的话,最好能在分析流程里面将结果图也放上去,便于你或者其他人后续的重复。R’s knitr和iPython 都可以帮助我们做到这一点。
Chapter 2
关于相对路径和绝对路径这一点,我觉得是仁者见仁,智者见智的。
-
$ 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,通配符最常见的语法是
*
代表任意数量的字符(但会忽略 .bashrc 这种点号开头的隐藏文件)
? 代表单个字符
[A-Z] 可以匹配方括号里面的任意一个字符(比如[aeiou]),也可以匹配A-Z这26个大写字母([start-end]这种连续范围),也可以匹配0-9这种数字。但需要注意的是,匹配的是含有字母或数字的
字符串
。
按作者所说,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
OS 和 linux 系统对于命令的参数数目(更准确来说是命令的长度)实际上是有限制的。这种“Argument list too long” 通常会出现在你用通配符匹配了太多的文件。
这种解决方法在书的后面也提到了。
-
$ 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
阅读原文体验更加