R/BioC序列处理之一:Biostrings常量与序列容器

  • A+
所属分类:Script

序列说到底就是文本/字符串类型的数据,你完全可以用纯纯的R base函数来处理,只是太麻烦,而且效率很低。BioC的IRanges包从数据结构和运算规则等角度对生物序列做了很细致的定义,是使用R高效处理生物序列数据的基础。但是IRanges包定义的类和方法(函数)实在太多了,学习起来很乏味,有空自己啃吧。我们从Biostrings包开始。

一、用R base的函数来处理序列

先写一个用于产生随机DNA/RNA/AA序列的函数:

这个函数的参数dict用于指定字符字典,n 是要产生的序列长度,后面有几个地方要用到它。有关R处理文本/字符串的函数我已经在另一篇文章里面介绍过了,这里只演示一下如何用这些函数来做简单的序列处理(mapply函数的用法可以参考数据汇总/透视一文):

二、Biostrings定义的常量

包括DNA、RNA、AA、密码子的符号,载入Biostrings包后这些常量就可以直接使用,虽然看起来简单,但很方便:

还有就是用于核酸和蛋白比对的取代矩阵,这些数据需用户自行载入(最后三个是函数,但可以不设参数):

三、Biostrings定义的类(序列容器)

1、容纳单一序列的类

有XString、BString,DNAString,RNAString和AAString共5类,其中XString是虚拟类,不能产生XString对象,其他4类都是XString的子类:

再追究XString的来源就复杂了,你可以用getClass函数一个个回溯着看。

除XString外,用与类名称同名的函数就可以由字符串向量(向量长度为1)产生相应的序列对象。BString可以用任意字符(当然要符合R的字符串规则),而DNAString,RNAString和AAString对字符有相应限制。但测试结果却是AAString对字符也不检查,可能函数有问题:

2、容纳序列集的类

与容纳单一序列的类对应,容纳序列集(多个序列)的类有XStringSet、BStringSet,DNAStringSet,RNAStringSet和AAStringSet(下面统称为XXXset)。XStringSet是虚拟类,不能实例化,其他4类由它派生而来。此外,由XStringSet直接派生出来还有QualityScaledXStringSet:

序列集类型的对象和单条序列一样用与类名称同名的函数由字符串向量产生。下面的代码用 rndSeq 和 mapply 函数产生了一个DNA序列向量,包含有4条长短不一的序列,然后用它生成了一个 DNAStringSet 对象:

但更多的时候是用这些容器来放置由fasta格式文件读取得到序列,这个过程由相应的readXXXSet函数完成。readXXXSet 函数在老版本的Biostrings中是read.XXXSet,现在旧版函数已被弃用。下面例子用file.choose函数选择了包含拟南芥基因组序列FASTA格式文件,有7条序列,读入后得到一个DNAStringSet对象:

当然也有readBStringSet、readRNAStringSet 和 readAAStringSet 函数。还可以直接用构造函数由 DNAStringSet 对象直接产生 RNAStringSet 对象,但 AAStringSet 对象不行:

XXXSet对象构造函数同时也是XXXSet取子序列的函数,它还有几个参数,分别是start, end, width 和 use.names。前三个参数很有用,比如从染色体上截取两个位置间的序列或者截取某些位点上游或下游N个碱基的序列:

start, end, width的组合运算使用向量循环规则,即短向量循环使用。

如果原序列是XXXSet类对象,start/end/width的向量长度不能超过原序列:

如果原序列是XString类对象,对start/end/width的向量长度没有限制,但取子序列的位置(start/end)应在原序列的范围之内:

组合使用3个参数中的2个基本可以满足序列截取的需要。XXXSet 对象是列表,可取元素或子集,元素是对应的String(从上面的代码已经可以看出)。

3、XStringViews类

XStringViews类由通过继承Views类(IRanges包定义)而来,XStringViews类对象用于存储同一条序列(目标序列)上的一系列“视野”,即序列区域或子序列。每一个视野由起始点(start)和终止点(end)确定,也隐含了序列的长度信息。

XStringViews和显微镜下观察物体类似,从一大片区域内挑选感兴趣的区域存储起来。用于挑选(即获取对象)的是Views()函数(IRanges包提供),用法和XXXSet的对象构造函数差不多,但只能使用XString和长度为1的字符串向量,XXXSet类对象即使只包含有一条序列也不行:

IRanges包提供successiveViews方法同样可以用来产生XStringViews类对象,获得的是目标序列上连续的区域,它的用法是:

使用该函数可以非常方便地获得长度和间隔都很规律的序列,例如:

4、MaskedXString掩膜序列类

序列的掩膜方法也是由IRanges包定义的,Biostrings包只是将该方法应用到了XString类对象上。和XString一样,MaskedXString也是虚拟类,能够实例化(产生对象实体)的是它的子类:"MaskedBString", "MaskedDNAString", "MaskedRNAString", "MaskedAAString"类。

用于产生掩膜序列对象的函数是maskMotif(),如:

通过类型转换可以把MaskedXString类对象转成Views类对象,但是BStrings有更直接的方式:mask()函数。两种方式是完全等价的:

有时候被掩膜掉的区域才是我们敢兴趣的,比如寻找酶切位点,这时候我们要对掩膜区和非掩膜区进行反转,使用gaps()函数可以完成。而去除掩膜可以用unmasked()函数,去除掩膜对象的序列(仅保留掩膜信息)用masks()函数:

原文来自:http://blog.csdn.net/u014801157/article/details/24372449

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: