搜索
查看: 2373|回复: 0

[mRNA-seq] IRanges说明(1/3)

[复制链接]

13

主题

66

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
QQ
发表于 2017-4-7 15:11:22 | 显示全部楼层 |阅读模式
本帖最后由 惠真-市二医院 于 2017-4-7 19:07 编辑

IRanges说明(1/3)

Introduction
IRanges包是用呈现序列信息的,使用范围及相关内容作为描述序列的标记。

安装并使用library加载IRanges包。

Vecotor objects
IRanges包中,序列被认为是一个有限的有序的元素的集合。该IRanges包描述了两种序列类型:atomic sequencelist。所有源于IRagnes的序列都继承了Vector virtual class

Atomic Vecors
atomic 序列典型地储存为atomic vectorIRanges包中包含了额外的atomic sequence对象,Rle,它是一种使用run-length encoding 压缩的atomic sequence
先说rle函数:使用向量计算计算序列的值和相同值的长度的,或者反向计算序列该信息:

rle函数(Run Length Encoding)的返回值是一个”rle”的类,由一个列表组成:lengths(长度),使用整数值来包含每个run的长度,这里run的理解就是,将相邻的相同大小元素的值合并到一个run内,统计合并元素的数目为lengthvalues(值),相邻的相同大小元素的值,如果与左右相邻值都不同,那么该value就是该元素本身的值,且length1。同时lengthsvalues均为向量。这里需要注意的是rle的对象x为向量(不为列表)。

如图可见:向量x内容包含了16,27,38…
Rle函数是基于rle函数建立起来的,通用的以run-length encoding模式来存储单元素向量。

使用方法如上图:Rle(values,lengths),创建一个Rle对象,这里可以指定valueslengths(正整数),但是这两个向量的值的长度必须相同,意味着你的values的个数和lengths所代表的values的个数要一致。然后可以使用一些函数来查看创建的Rle对象,例如:runLengthrunValue等。同时也可以使用这些函数来指定Rle对象的lengthvalue值:runLength(x) <- valuerunValue(x) <- value。说明其实很长,这里只是介绍了核心内容。


所有元素(atomic)序列均有三个主要特征:
使用length函数查看该向量的长度;使用”[“函数来提取部分序列来创建新的序列;使用c函数来合并多个序列。

Vector Subsetting
针对常规的R元素向量,常需要从一个向量中提取一个子集。当该子集不是简单复制或对提取序列的重排序时,该子集称之为子序列。一般我们可以使用 [ 函数来创建新的子序列,但是它并不是最佳方式。为解决这一问题,IRangs包支持6个额外的函数来提取子序列。
window         跨越指定区域来提取序列,这个指的是时间序列
subset          根据向量的逻辑值来提取子序列
head             从前往后提取连续n个序列单元
tail                从后往前提取连续n个序列单元
rep                重复序列单元来创建一重复序列
rev                反向排列序列单元来创建新的序列

图中第一步的IRanges4751,4760)创建了一个interval ranges(个人理解,间距范围),这里输出了第4751到第4760个值,然后对改值进行Rle转换:

具体IRanges函数后面再讲。

Combining Vector
合并向量,IRanges包使用两个一般的函数来处理向量的合并问题。



Looping over Vectors and Vector subsets
折叠向量及向量子集,这里采用了三个一般函数来折叠序列,分别是:endoapplylapplysapply;使用aggregateshiftApply来计算子序列情况。
lapplysapply的对象均是列表或向量;但是lapply返回值是列表,而sapply可以根据实际情况和simplify参数来选择返回值类型,可以是向量,矩阵,数组或列表。但是endoapply的返回值格式和输入值一样。
基础包中的aggregate说明如下:
aggregate函数集合了sapplywindow函数的功能,提取部分序列进行相应计算。
aggregate(x,by,FUN),其中x是待处理数据对象,by是一个变量名组成的列表,FUN是用来计算统计量的函数;
aggregate(y~x,data,FUN),其中y根据x进行分类,data是一个数据框或列表,包含指定的变量yxFUN是所采用的函数。
S4Vectors包中定义的aggregate函数可针对三种对象,分别是VectorRleList
aggregate(x,by,FUN,start=NULL,end=NULL,width=NULL,frequenc=Null…)
这里xVectorRleList对象;by是一个具有startendwidth的对象;FUN是所采用的函数;startendwidth,如果by缺失,那么至少要有其中的两个,且长度相等;frequency指定取样的频率。

shiftApply在说明中是针对两个类似向量的对象应用一个函数计算:
shiftApply(SHIFT,x,y,FUN…)
这里SHIFT是一个非负数的整数向量值,用于从xy中去除子集;FUN是所采用的函数。

这里分别求了xVectoryVector中对应值的相关性大小。

Run Length Encoding
这里就是一开始讲到的使用Rle函数创建Rle对象。由于我们使用的向量序列太大需要太多内存时,针对序列中的连续重复序列,Rle函数就可以使用run-length encoding的方式对其进行压缩,使用长度(length)对应到连续相等(value)的序列,例如:序列{1,1,1,2,3,3}可以变为:values{1,2,3}length{3.1.2}

这里从左到右上下对应看见,0值出现了16次,然后是1值出现1次,接着0值出现了686次,依次类推。
由于Rle将连续重复压缩为一个值,相比向量的存储就减少了很多存储大小:

如开头所讲,可以使用多个函数访问Rle对象所包含的信息:
runValue查看Rle对象的值,runLnegth查看Rle对象的长度

同时Rle对象支持很多针对R atomic向量的函数:







更多操作,请help(Rle)

Lists
列表在IRanges包中是向量的延伸。这里我们首先考虑的列表类型是包含atomic 序列的整数向量或Rle对象。我们希望通过不指定类型来查看每一个atomic序列的长度。因此我们定义了IntegerListRleList来用于存储数据,分别用来代表整数向量和Rle对象列表。
RleList类实际上包含SimpleRleListCompressedRleList两个子类。SimpleRleList使用常规的R列表来储存单元,而CompressedRleList使用保留单元变化的位置的unlisted格式来储存。同时所有的atomic向量类型(raw, logical, integer, numeric, complex, and character)都具有类似的列表子类,例如IntegerList包含了SimpleIntegerListCompressedIntegerList两个子类。

Lists of Atomic Vectors
以上针对存为向量或Rle对象的atomic向量列表,我们可以都使用函数IntegerList,搭配compress选项来创建Integer列表:

当然也可以使用RleList查看,结果为一个Rle格式的列表如下:

针对IntegerListcompress选项可以指明输出为SimpleCompress两种list对象形式:

我的理解compress=T会压缩长度为0list单元,xExploded内含有大量长度为0的单元,这里cIntList2的明显小于sIntList2

使用length可以查看源于向量的对象的长度:

elementNROWS返回单元的每一长度值,这里的单元是经过Rle转换后的每一个单元:

同样如同一般的R列表,可以使用”[[“提取单元,”c”合并,”lapply”/”sapply”来折叠数据,同时经过compress的列表更有效率:

Unlist ordinary R 列表对象(Rle),AtomicList 对象均支持Ops (e.g. +, ==, &), Math (e.g. log, sqrt),Math2 (e.g. round, signif), Summary (e.g. min, max, sum), Complex (e.g. Re, Im) 等函数操作:





上一篇:DEXSeq使用说明(3/3)
下一篇:IRanges说明(2/3)
苛求远离完美
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树 ( 粤ICP备15016384号  

GMT+8, 2019-10-19 01:22 , Processed in 0.054903 second(s), 33 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.