搜索
查看: 2364|回复: 1

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

[复制链接]

11

主题

54

帖子

242

积分

中级会员

Rank: 3Rank: 3

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

IRanges说明(2/3)

Data Tables
Vector Annotations
对于包含收集了信息的对象,我们常要加入注释信息。两种注释信息可以加到向量对象中:
1.整体对象的注释信息,我们可以通过metadata函数访问,输出为一般的列表格式;
2.单个对象单元的注释信息,通过mcols访问注释信息的列信息,输出为数据框格式。

Vector Ranges
当我们分析序列是,常对特殊的连续子序列感兴趣,例如,小写字母的字典排列序列。我们可以称前5个字母(ae)为连续子序列,但是包含元音的子序列(aeiou)不是连续的。连续子序列可使用范围来描述,指定起点位置和宽度,可以使用函数window来提取子序列。

当分析IRagnes 子序列时,每个范围都是一个观察值。实际上总体范围可以看做一个范围的列表,或连续整数的序列的列表。最常用来处理范围的函数是IRagnes,它使用普通的整数值来表示起点和宽度。我们一般使用参数startendwidth中的两个来指定IRanges函数的信息:




对于IRanges对象或其他Rangs的类似数据,同样可以通过数字或逻辑值来提取IRanges对象的子集:

我们可能把每一个整数范围的序列当作是一个范围,实际上Ragnes是源于IntegerList的:


Normality
有时我们通过保留原始顺序同时删除重复单元来描绘一个子序列,由此定义的一个Ragnes对象要求满足:1,没有空的范围;2,没有重复区间;3,顺序实从左到右排列;4,不包含相互临近的范围,两个连续范围之间的间隙必须是一个零值。
同时使用标准的Ranges队形有3个主要优势:1,确保了子序列编码或整数集合;2,所包含的范围数目紧凑;3,包含唯一的范围信息。
reduce函数首先将Ranges对象中的范围从左到右排列,然后将重叠或邻近的区域合并到一起:由此来标准化Ranges对象:


Lists of Ranges object
Ranges对象列表,构建RangeList,使用函数RangesList将每一个Ranges对象变为RangesList对象的一个单元,顺序同Ranges的顺序:


Finding Overlapping Ranges
发现重叠的Ranges,函数findOverlaps用于发现两个Ranges对象之间的重叠区域:

这里的quary指的是第一个Ranges对象(ir)subject指的是第二个Ranges对象(rev(ir))

Counting Overlapping Ranges
计算重叠的Ranges对象,针对对象中的每一位置,计算覆盖它的数目:


Transforming Ranges
Adjusting startsends and widths
转换Ranges对象,最简单的就是调整起点,使用函数shift,这里将每一个范围向前调整了10的单位:


solveUserSEW
这里要说下IRanges的另一种构建函数,solveUserSEW
solveUserSEW(refwidths, start=NA, end=NA, width=NA, rep.refwidths=FALtranslate.negative.coord=TRUE,allow.nonnarrowing=FALSE)
对于solveUserSEW的整数向量,其中startendwidth可以为NArefwidths是一个非NA且非负值的整数向量,包含了参考的widths;只有当refwidths的长度为1时,需要设置rep.refwidths=TRUE,此时’refwidths’根据startendwidth中的最大长度进行复制,这样就保证了'refwidths', 'start', 'end' 'width'是相等长度的向量;'start', 'end' 'width'至少有一个是NAs
假如'translate.negative.coord'是真,那么任何startend的负值则会根据对应的refwidth+1+start来转换;
假如'start', 'end' 'width'包含至少2NAs,那么width一定是其中一个,假如startNAs,那么start就为1,假如end是其中一个,那么end值就用refwidth代替,最终的width值将会根据公式:end-start+1来计算得来;
假如startendwidth中只有一个NAs,那么将根据公式:width==end-start+1来计算得来。另外startendwidth值会根据参数进行循环使用,对于长度为1refwidths,方法同上。
例如:

但是对于narrow是如何处理的,我还不清楚,还有下面的threebandsrestrictreflectflank函数!!!
数学操作符号+-*号会系统性的改变startend

乘号*操作会系统的扩大范围对象,负号表扩展,正号表紧缩:





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

使用道具 举报

11

主题

54

帖子

242

积分

中级会员

Rank: 3Rank: 3

积分
242
QQ
 楼主| 发表于 2017-4-21 13:46:23 | 显示全部楼层
narrow函数,会根据start、end或width值对IRanges对象的范围进行缩减:
代码如下:
function(x, start=NA, end=NA, width=NA, use.names=TRUE)
    {
        if (is(x, "NormalIRanges"))
        stop("narrowing a NormalIRanges object is not supported")
        solved_SEW <- solveUserSEW(width(x), start=start, end=end, width=width)
        ans_start <- start(x) + start(solved_SEW) - 1L
        ans_width <- width(solved_SEW)
        x <- update(x, start=ans_start, width=ans_width, check=FALSE)
        x
}

flank函数返回IRanges对象的侧翼距离:
flank(x, width, start=TRUE, both=FALSE, use.names=TRUE, ...)
默认start为T,此时若width为正整数,则返回左侧翼相应宽度位置;若width为负整数,则返回左侧内侧相应宽度位置。当start为FALSE时,则返回右侧相应位置,当both为TRUE时,则同时返回左侧和右侧对应位置:

reflect函数返回镜像位置:
reflect(x, bounds, use.names=TRUE),根据bounds做中心对称旋转!

promoters函数返回每个范围的启动子区域:
promoters(x, upstream=2000, downstream=200, ...)
这里的起点就是对象x的start位置:
转换后的start为(start(x) - upstream);end为start(x)+downstream-1;width为upstream+downstream!

restrict函数将对象x中的范围限制到参数start和end指定的范围内:
restrict(x, start=NA, end=NA, keep.all.ranges=FALSE, use.names=TRUE)
threebands函数则将延伸了narrow函数的功能,返回3个相关范围,分别对应到”left”,”middle”和”right”,其中”middle”范围对应的就是narrow函数返回的范围:

苛求远离完美
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-8-22 22:36 , Processed in 0.042495 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.