内容

1简介

GenomicTuplesR包定义了用于存储的通用容器基因组的元组.它旨在为基因组坐标元组提供功能,这些元组类似于基因组范围中的可用功能GenomicRangesBioconductor包。

的功能GenomicTuples包装几乎完全基于美妙GenomicRanges包中。因此,我尽量保持用户界面相似。这个小插图也很大程度上是基于小插图“基因组范围类介绍”,包括在GenomicRanges1GenomicRanges小插图可以通过输入来访问小插图("GenomicRangesIntroduction", package = "GenomicRanges")在R控制台。.虽然不是必需的,熟悉GenomicRanges将有助于理解GenomicTuples包中。

1.1什么是基因组元组?

基因组元组由A定义序列的名字seqnames),一个)和a元组元组).基因组元组中的所有位置必须在同一链上,并按升序排序。每个元组都有一个相关联的大小,为正整数。例如,Chr1:+:{34,39,60}是一个三元组(大小= 3)的位置chr1:34chr1:39而且chr1:60+链。

当提及通用(固定)基因组元组时大小,我将这些缩写为\ \(米)元组,\ \(米)大小.我将把第一个位置称为\ (pos_ {1} \)pos1),第二个为\ (pos_ {2} \)pos2),\ (\ ldots {} \),最终位置为\ (pos_ {m} \)posm).

基因组元组和基因组范围之间的差异可以被认为是集合和区间之间的差异。例如,基因组元组chr10: -:{800、900}只包括职位chr10: -: 800而且chr10: -: 900而基因组范围chr10: -(800、900):包括职位chr10: -: 800chr10: -: 801chr10: -: 802\ (\ ldots {} \)chr10: -: 900

1.2什么时候需要基因组元组?

简而言之,当你的基因组数据的坐标被一个集合比一个区间更好地定义时。

的原始用例GTuples类是用来存储“甲基化模式”的基因组坐标。我目前正在一个单独的R包中开发这些想法,MethylationTuples,它大量使用GTuples类。其他基因组数据,如包含多个变体的长读取,也可以更好地概念化为基因组元组,而不是基因组范围,因此可能受益于GenomicTuples基础设施。

2GTuples

GTuples类表示基因组元组的集合,其中每个元组具有相同的元组大小.属性可以创建这些对象GTuples构造函数。例如,下面的代码创建一个GTuples具有10个基因组元组的对象:

library(GenomicTuples) #>加载所需的包:GenomicRanges #>加载所需的包:stats4 #>加载所需的包:BiocGenerics #>加载所需的包:parallel #> #>加载包:'BiocGenerics' #>以下对象从'package:parallel'中被屏蔽:> # b> clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, # b> clusterExport, clusterMap, parApply, parCapply, parApply, # b> parapplylb, parRapply, parSapply, parSapplyLB #>以下对象从'package:stats'中被屏蔽:#> #> IQR, mad, sd, var, xtabs #>以下对象从'package:base'中被屏蔽:#> #> Filter, Find, Map, Position, Reduce, anyduplicate, append, #> as.data.frame, basename, cbind, colnames, dirname, do。调用#> duplication eval evalq get grep grepl intersect is。Unsorted, #> lapply, mapply, match, mget, order, paste, pmax, pmax.int, pmin, #> pmin.int, rank, rbind, rownames, sapply, setdiff, sort, table, #> tapply, union, unique, unsplit,其中。马克斯,。加载所需的包:S4Vectors #> #>附加包:'S4Vectors' #>以下对象从'package:base'被屏蔽:#> #> I,展开。加载所需的包:IRanges #>加载所需的包:GenomeInfoDb
seqinfo <- seqinfo (paste0("chr", 1:3), c(1000,2000,1500), NA, "mock1") gt3 <- GTuples(seqnames = Rle(c("chr1", "chr2", "chr1", "chr3", "chr3", "chr3", "chr3"), c(1,3,2,4)),元组=矩阵(c(1:10, 2:11, 3:12), ncol = 3), strand = Rle(strand(c("-", "+", "*", "+", "-"), c(1,2,2,3,2))), score = 1:10, GC = seq(1,0, length = 10), seqinfo = seqinfo) names(gt3) <- letters[1:10] gt3 #> GTuples对象有10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > 1.000000 # chr1 1 2 3 - | 1 > 0.888889 b chr2 2 3 4 + | 2 # > 0.777778 c chr2 3 4 5 + | 3 # > d chr2 4 5 6 * | 4 0.666667 # > e chr1 5 6 7 * 0.555556 | 5 # > 0.444444 f chr1 6 7 8 + | 6 # > 0.333333 g chr3 7 8 9 + | 7 # > h chr3 8 9 10 + | 8 0.222222 # >我chr3 9 10 11 - | 9 # > j chr3 10 11 12 - 0.111111 | 0.000000十  #> --- #> seqinfo: 3从mock1基因组序列

的输出。GTuples显示方法非常类似于显示方法GenomicRanges:农庄对象。也就是说,它将信息分为左右两个区域,由|符号。基因组坐标(seqnames元组,)位于左侧,元数据列(注释)位于右侧。在本例中,元数据由分数而且GC类的元数据部分中几乎可以存储任何内容GTuples对象。

两者的主要区别是GTuples对象和GenomicRanges:农庄对象是前者使用的元组而后者使用范围在基因组坐标中。

获取更多关于GTuples类,请务必查阅文档:

GTuples ?

2.1GTuples方法

用于定义的大多数方法GenomicRanges:农庄也定义为GTuples.那些尚未定义的对象,即那些对范围有意义但对元组通常没有意义的对象,将返回错误消息。

如果您需要一个没有定义的方法GTuples而是定义为GenomicRanges:农庄,那么这可以通过首先强制GTuples对象的GenomicRanges:农庄对象;警告:胁迫GTuples对象的GenomicRanges:农庄一般是破坏性操作吗

“农庄”(g3)与10 # >农庄组织对象范围和2元数据列:# > seqnames范围链|得分GC # > < Rle > < IRanges > < Rle > | <整数> <数字> # > 1.000000 chr1 1 - 3 - | 1 # > b chr2 2 - 4 + | 2 0.888889 # > c 0.777778 chr2 3 - 5 + | 3 # > d chr2 4 - 6 # > e chr1 5 - 7 * 0.666667 * | 4 | 5 # > 0.555556 f chr1 6 - 8 + | 6 # > 0.444444 g chr3 7 - 9 + 0.333333 | 7 # > h chr3 8 - 10 + | 8 0.222222 # >我chr3 9 - 11 - 0.111111 | 9 # > j chr3 10 - 12 - 0.000000 | 10  #> ------- #> seqinfo:mock1基因组3个序列

2.1.1基本GTuples访问器

基因组坐标的组成部分GTuples对象可以使用seqnames元组,访问器的功能。警告:元组访问器应用于取代范围访问器。而范围方法是定义良好的,即它访问\ (pos_ {1} \)而且\ (pos_ {m} \)对于对象,这通常不是所期望或要求的。

seqnames (g3) # > factor-Rle长度10 4 # >运行长度:1 2 3 4 # >价值观:chr1 chr2 chr1 chr3 # >水平(3):chr1 chr2 chr3元组(g3) # > pos1 pos2 pos3 # >[1] 1 2 3 # >[2] 2 3 4 # >[3] 3 4 5 # >[4] 4 5 6 # >[5] 5 6 7 # >[6] 6 7 8 # >[7] 7 8 9 # >[8] 8 9 10 # >[9] 9 10 11 # >[10] 10 11 12链(g3) # > factor-Rle长度10与5 # >运行长度:1 2 2 3 2 # >的值  : - + * + - #> 水平(3):+ - *

这些坐标的存储注释可以提取为DataFrame对象使用mcols访问器:

mcols(gt3) #>数据帧与10行2列# b>评分GC #> <整数> <数字> #> a 1 1.000000 #> b 2 0.888889 #> c 3 0.777778 #> d 4 0.666667 #> e 5 0.555556 #> f 6 0.444444 #> g 7 0.333333 # b> h 8 0.222222 #> i 9 0.111111 #> j 10 0.000000

Seqinfo可以使用seqinfo访问器:

#> seqnames seqlengthiscircular genome #> chr1 1000 NA mock1 #> chr2 2000 NA mock1 #> chr3 1500 NA mock1

还定义了访问长度和名称的方法:

长度(g3) # >[1] 10名(g3) # >[1]“a”“b”“c”“d”“e”“f”“g”“h”“我”“j”

2.1.2拆分和合并GTuples对象}

GTuples对象可以使用分裂方法。这就产生了GTuplesList对象,一个将在下一节详细讨论的类:

sp < -分裂(g3,代表(1:2,每个= 5))sp # > GTuplesList对象长度2:# > $ 1 # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > 1.000000 chr1 1 2 3 - | 1 # > 0.888889 b chr2 2 3 4 + | 2 # > 0.777778 c chr2 3 4 5 + | 3 # > d chr2 4 5 6 * | 4 0.666667 # > e chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ ' 2 ' # > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> f chr1 6 7 8 + | 6 0.444444 #> g chr3 7 8 9 + | 7 0.333333 #> h chr3 8 9 10 10 + | 8 0.222222 #> i chr3 9 10 11 - b| 9 0.111111 #> j chr3 10 11 12 - | 10 0.000000 #>—#> seqinfo:来自mock1基因组的3个序列

如果你得到它的分量GenomicTuplesList,它们也可以通过使用c而且附加方法:

c (sp [[1]], sp [[2]]) # > GTuples对象10 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > 1.000000 chr1 1 2 3 - | 1 # > 0.888889 b chr2 2 3 4 + | 2 # > 0.777778 c chr2 3 4 5 + | 3 # > d chr2 4 5 6 * | 4 0.666667 # > e chr1 5 6 7 * 0.555556 | 5 # > 0.444444 f chr1 6 7 8 + | 6 # > 0.333333 g chr3 7 8 9 + | 7 # > h chr3 8 9 10 + | 8 0.222222 # >我chr3 9 10 11 - | 9 # > j chr3 10 11 12 - 0.111111 | 0.000000十  #> --- #> seqinfo: 3从mock1基因组序列

2.1.3构造子集GTuples对象

预期的子设置操作也可用于GTuples对象:

gt3[2:3] #> GTuples对象,2 x 3元组和2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> b chr2 2 3 4 + | 2 0.888889 #> c chr2 3 4 5 + | 3 0.777778 #>—#> seqinfo:来自mock1基因组的3个序列

的第二个参数子集运算符可用于指定要从GTuples对象。例如:

gt3[2:3, "GC"] #> GTuples对象,2 x 3元组和1元数据列:#> seqnames pos1 pos2 pos3 strand | GC #> b chr2 2 3 4 + | 0.888889 #> c chr2 3 4 5 + | 0.777778 #>—#> seqinfo:来自mock1基因组的3个序列

元素的元素中也可以赋值GTuples对象。这是一个例子,a的第二行GTuples对象的第一行替换为及至

gt3_mod <- gt3 gt3_mod[2] <- gt3[1] head(gt3_mod, n = 3) #> GTuples对象,具有3个3元组和2个元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> a chr1 1 2 3- | 1 1.000000 #> b chr1 1 2 3- | 1 1.000000 #> c chr2 3 4 5 + | 3 0.777778 #>—#> seqinfo:来自mock1基因组的3个序列

还有重复、反转或选择特定部分的方法GTuples对象:

#> seqnames pos1 pos2 pos3 strand | score GC #> b chr2 2 3 4 + | 2 0.888889 #> b chr2 2 3 4 + | 2 0.888889 #> b chr2 2 3 4 + | 2 0.888889 #> - #> seqinfo: 3序列从mock1基因组rev(gt3) #> GTuples对象与10 x 3元组和2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > j chr3 10 11 12 - 0.000000 | 10 # >我chr3 9 10 11 - 0.111111 | 9 # > h chr3 8 9 10 + | 8 0.222222 # > 0.333333 g chr3 7 8 9 + | 7 # > 0.444444 f chr1 6 7 8 + | 6 # > e chr1 5 6 7 * 0.555556 | 5 # > d chr2 4 5 6 * | 4 0.666667 # > 0.777778 c chr2 3 4 5 + | 3 # > 0.888889 b chr2 2 3 4 + | 2 # > chr1 1 2 3 - | 1 1.000000  #> --- #> seqinfo: 3从mock1基因组序列头(g3, n = 2) # > GTuples对象2 x r3和2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > 1.000000 # chr1 1 2 3 - | 1 > b chr2 2 3 4 + | 2 0.888889  #> --- #> seqinfo: 3从mock1基因组序列尾(g3, n = 2) # > GTuples对象2 x r3和2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # >我chr3 9 10 11 - 0.111111 | 9 # > 0.000000 j chr3 10 11 12 - | 10  #> --- #> seqinfo: 3从mock1基因组序列窗口(g3,开始= 2,结束= 4)# > GTuples对象和3 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> b chr2 2 3 4 + | 2 0.888889 #> c chr2 3 4 5 + | 3 0.777778 #> d chr2 4 5 6 * | 4 0.666667 #>—#> seqinfo:来自mock1基因组的3个序列

2.1.4的基本元组操作GTuples对象

的基本元组特征GTuples对象可以使用开始结束,元组方法。警告:当宽度方法是定义良好的,即as\(pos_{m} - pos_{1} + 1\),这可能不是必需的。相反,请参阅IPD方法,该方法将在下一节中讨论

开始(g3) # >[1] 1 2 3 4 5 6 7 8 9 10结束(g3) # >[1] 3 4 5 6 7 8 9 10 11 12元组(g3) # > pos1 pos2 pos3 # > [1] 1 2 3 # > [2] 2 3 4 # > [3] 3 4 5 # > [4] 4 5 6 # > [5] 5 6 7 # > [6] 6 7 8 # > [7] 7 8 9 # > [8] 8 9 10 # > [9] 9 10 11 # > [10] 10 11 12

2.1.4.1Intra-tuple操作

定义的大部分范围内方法GenomicRanges:农庄对象目前没有通过扩展来定义GTuples由于对象之间的差异范围而且元组.那些当前没有定义,并且返回错误消息的对象是:

  • 狭窄的
  • 侧面
  • 启动子
  • 调整
  • 运维

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

这两个修剪而且转变方法是定义良好的,尽管前者在某种程度上受到限制,因为如果内部职位超过了seqlengths

shift(gt3, 500) #> GTuples对象,包含10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > 1.000000 chr1 501 502 503 - | 1 # > b chr2 0.888889 502 503 504 + | 2 # > c chr2 0.777778 503 504 505 + | 3 # > d chr2 504 505 506 * 0.666667 | 4 # > e chr1 505 506 507 * 0.555556 | 5 # > 0.444444 f chr1 506 507 508 + | 6 # > 0.333333 g chr3 507 508 509 + | 7 # > h chr3 0.222222 508 509 510 + | 8 # >我chr3 509 510 511 - 0.111111 | 9 # > 0.000000 j chr3 510 511 512 - | 10  #> --- #> seqinfo: 3从mock1基因组序列
#由于元组超出seqlength x <- shift(gt3[1], 999) #> valid.GenomicRanges警告seqinfo (x,建议。修剪=TRUE): GRanges object contains 1 out-of-bound range located on sequence chr1. #> Note that ranges located on a sequence whose length is unknown (NA) or #> on a circular sequence are not considered out-of-bound (use #> seqlengths() and isCircular() to get the lengths and circularity flags #> of the underlying sequences). You can use trim() to trim these ranges. #> See ?`trim,GenomicRanges-method` for more information. x #> GTuples object with 1 x 3-tuple and 2 metadata columns: #> seqnames pos1 pos2 pos3 strand | score GC #> a chr1 1000 1001 1002 - | 1 1 #> --- #> seqinfo: 3 sequences from mock1 genome # Returns an error because internal position exceeds sequence length, resulting # in a malformed tuple when trimmed. trim(x) #> Error in validObject(object): invalid class "GTuples" object: #> positions in each tuple must be sorted in strictly increasing order, #> i.e. 'pos1' < ... < 'pos3'

2.1.4.2Inter-tuple操作

定义的范围间方法GenomicRanges:农庄对象当前通过扩展for定义GTuples由于对象之间的差异范围而且元组.那些当前没有定义,并且返回错误消息的对象是:

  • 范围
  • 减少
  • 差距
  • 分离
  • isDisjoint
  • disjointBins

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

2.1.4.3间隔设置操作GTuples对象

没有为之定义的间隔设置操作GenomicRanges:农庄对象当前通过扩展for定义GTuples对象,因为范围和元组之间存在差异。那些当前没有定义,并且返回错误消息的对象是:

  • 联盟
  • 相交
  • setdiff
  • punion
  • pintersect
  • psetdiff

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

2.1.5特有的附加方法GTuples

GTuples有一些特别定义的方法,但不存在GenomicRanges:农庄.这些都是元组大小而且IPD

元组方法,它有点类似于范围方法GenomicRanges:农庄,尽管返回一个整数矩阵而不是IRanges: IRanges对象:

元组(g3) # > pos1 pos2 pos3 # > [1] 1 2 3 # > [2] 2 3 4 # > [3] 3 4 5 # > [4] 4 5 6 # > [5] 5 6 7 # > [6] 6 7 8 # > [7] 7 8 9 # > [8] 8 9 10 # > [9] 9 10 11 # > [10] 10 11 12

大小方法返回存储在对象中的元组的大小:

尺寸(gt3) #> [1]

的每一个m元组\(m \geq 2\)具有对内距离的相关向量(\ (IPD \)).它被定义为\ (IPD = (pos_ {2} - pos_ {1}, \ ldots pos_ {m} - pos_ {m - 1}) \).的IPD方法返回此整数矩阵,其中\ (^ {th} \)行包含\ (IPD \)\ (^ {th} \)元组:

IPD (g3) # > [1] [2] # > [1] 1 1 # > [2] 1 1 # > [3] 1 1 # > 1 1 # > [4] [5] 1 1 # > 1 1 # > [6] [7] 1 1 # > 1 1 # > [8] [9] 1 1 # > [10] 1 1

2.2实现细节

GTuples类可以看作是一个矩阵链接对象,列数等于大小元组加两个(一个用于seqname还有一个是),在内部,它扩展GenomicRanges:农庄类。具体来说,范围插槽存储IRanges: IRanges对象包含\ (pos_ {1} \)而且\ (pos_ {m} \)而且,如果大小\ (> 2 \),则用矩阵储存“内部位置”的坐标,\(pos_{2}, \ldots, pos_{m - 1}\)internalPos槽。如果大小\ (2 \ \ leq)然后internalPosSlot设置为.的大小存储为整数的大小槽。

虽然也有人认为应该创建独立的GTuples而且GTuplesList类,通过扩展GenomicRanges:农庄而且GenomicRanges: GRangesList通过适当定义的继承,类可以“免费”获得许多非常有用的功能。

3.GTuplesList

GTuplesList类的容器S4Vectors:列表GTuples对象。它扩展了GenomicRanges: GRangesList类。

目前,所有GTuples在一个GTuplesList必须有相同的大小2的未来版本中可能会更改这一点GenomicTuples.我预计用户将主要使用GTuples对象和有很少的需要直接使用GTuplesList对象。

seqinfo < - seqinfo (paste0(“空空”,1:3),c(1000、2000、1500),NA, mock1)及至< GTuples (seqnames = Rle (c(“chr1”、“chr2”,“chr1”、“chr3”),c(1、3、2、4)),元组=矩阵(c (1:10, 2:11 3:12) ncol = 3),链= Rle(链(c ("-", "+", "*", "+", "-")), c(1、2、2、3、2)),得分= 1:10,GC = seq(1 0长度= 10),seqinfo = seqinfo) gtl3 < - GTuplesList (A = g3 [1:5], [10]) B = g3 gtl3 # > GTuplesList对象长度2:$ # # > > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ B # > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 6 7 8 + | 6 0.444444 #> [2] chr3 7 8 9 9 9 + | 7 0.333333 #> [3] chr3 8 9 10 10 - | 9 0.111111 #> [5] chr3 10 11 12 - | 10 0.000000 #>—#> seqinfo:来自mock1基因组的3个序列

获取更多关于GTuplesList类,请务必查阅文档:

GTuplesList ?

3.1GTuplesList方法

用于定义的大多数方法GenomicRanges: GRangesList也适用于GTuplesList.那些尚未定义的对象,即那些对范围有意义但对元组通常没有意义的对象,将返回错误消息。

的方法GTuplesList而是定义为GenomicRanges: GRangesList是真正需要的,那么这可以通过先胁迫来实现吗GTuplesList对象的GenomicRanges: GRangesList对象,注意这通常是一个破坏性操作:

(gtl3, GRangesList) # > GRangesList对象长度2:$ # # > >农庄对象5和2元数据列:# > seqnames范围链|得分GC # > < Rle > < IRanges > < Rle > | <整数> <数字> # > [1]chr1 1 - 3 - 1.000000 | 1 # > [2] chr2 2 - 4 + | 2 0.888889 # > [3] chr2 3 - 5 + 0.777778 | 3 # > [4] chr2 4 - 6 * 0.666667 | 4 # > [5] chr1 5 - 7 * 0.555556 | 5  #> ------- #> seqinfo: 3从mock1基因组序列# > # > $ B与5 # >农庄组织对象范围和2元数据列:#> seqnames ranges strand | score GC #>    |   # b> [1] chr1 6-8 + | 6 0.444444 #> [2] chr3 7-9 + | 7 0.333333 #> [3] chr3 8-10 + | 8 0.222222 #> [4] chr3 9-11 - | 9 0.111111 #> [5] chr3 10-12 - | 10 0.000000 #> seqinfo:来自mock1基因组的3个序列

3.1.1基本GTuplesList访问器}

这些和可用的非常相似GTuples对象,除了它们通常返回一个列表,因为输入现在实际上是一个列表GTuples对象:

seqnames(gtl3) #>长度为2的RleList #> $A #>因子-长度为5的rle,有3次运行#>长度:1 3 1 #>值:chr1 chr2 chr1 #>级别(3):chr1 chr2 chr3 #> #> $B #>因子-长度为5的rle,有2次运行#>长度:1 4 #>值:chr1 chr3 #>级别(3):chr1 chr2 chr3 #返回整数矩阵元组列表(gtl3) #>长度为2的列表#>名称(2):B元组(gtl3) [[1]] # > pos1 pos2 pos3 # >[1] 1 2 3 # >[2] 2 3 4 # >[3] 3 4 5 # >[4] 4 5 6 # >[5] 5 6 7链(gtl3) # > RleList长度2 # > $ # > factor-Rle长度5与3 # >运行长度:1 2 2 # >的值  : - + * #> 水平(3 ): + - * #> #> $ B # > factor-Rle长度与2 # >运行长度:5 3 2 # >的值  : + - #> 水平(3):+ - *

长度而且的名字方法将分别返回列表的长度和名称:

长度(gtl3) #>[1] 2名(gtl3) #>[1]“A”“B”

Seqinfo可以使用seqinfo访问器:

#> seqnames seqlengthiscircular genome #> chr1 1000 NA mock1 #> chr2 2000 NA mock1 #> chr3 1500 NA mock1

elementNROWS方法返回与调用结果对应的整数列表长度在每个人身上GTuples对象所包含的GTuplesList.这是一个比打电话更快的选择拉普兰人GTuplesList

elementNROWS(gtl3) #> A B #> 5 5

你也可以使用isEmpty测试是否GTuplesList对象包含任何内容:

isEmpty(gtl3) #> [1] FALSE isEmpty(GTuplesList()) #> [1] TRUE

最后,在a的背景下GTuplesList对象,mcols方法执行的操作与它在GTuples对象。但是,这个元数据现在引用列表级别的信息,而不是个人级别的信息GTuples对象:

mcols(gtl3) <- c("Feature A", "Feature B") mcols(gtl3) #> DataFrame with 2 row and 1 column #> value #>  #> A Feature A #> B Feature B

3.1.2结合GTuplesList对象

GTuplesList对象可以不被列出来组合分开的对象GTuples它们所包含的展开对象GTuples

ul < - unlist (gtl3) ul # > GTuples对象10 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > chr1 1 2 3 - 1.000000 # > chr2 | 1 2 3 4 + | 2 0.888889 # > chr2 3 4 5 + | 3 # > chr2 4 5 6 * 0.777778 | 0.666667 4 # > chr1 5 6 7 * 0.555556 | 5 # > 0.444444 B chr1 6 7 8 + | 6 # > 0.333333 B chr3 7 8 9 + | 7 # > B chr3 8 9 10 + | 8 # > B chr3 9 10 11 - 0.222222 | 0.111111 9 # > B chr3 10 11 12 - 0.000000 | 10  #> --- #> seqinfo: 3从mock1基因组序列

你也可以结合GTuplesList对象一起使用附加c

3.1.3构造子集GTuplesList对象

构造子集的GTuplesList对象的子集是相同的GenomicRanges: GRangesList对象:

gtl3 [1] # > GTuplesList对象长度1:$ # # > > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3基因组序列从mock1 gtl3 [[1]] # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3基因组序列从mock1 gtl3 [A] # > GTuplesList对象长度1:$ # # > > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 1 2 3- | 1 1.000000 #> [2] chr2 2 3 + | 2 0.888889 #> [3] chr2 3 4 5 + | 3 0.777778 #> [5] chr2 4 56 * | 4 0.666667 #> [5] chr1 56 7 * | 5 0.555556 #>——# b> seqinfo: 3序列从mock1基因组gtl3$B #> GTuples对象5 x 3-元组和2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 6 7 8 + | 6 0.444444 #> [2] chr3 7 8 9 9 9 + | 7 0.333333 #> [3] chr3 8 9 10 10 - | 9 0.111111 #> [5] chr3 10 11 12 - | 10 0.000000 #>—#> seqinfo:来自mock1基因组的3个序列

当子集GTuplesList,您还可以传入第二个参数(如使用GTuples对象)再次指定您希望选择的元数据列:

gtl3[1, "分数"]# > GTuplesList对象长度1:$ # # > > GTuples对象和5 x包含1元数据列:# > seqnames pos1 pos2 pos3链|得分# > [1]chr1 1 2 3 - | 1 # > [2] chr2 2 3 4 + | 2 # > [3] chr2 3 4 5 + | 3 # > [4] chr2 4 5 6 * | 4 # > [5] chr1 5 6 7 * | 5  #> --- #> seqinfo: 3基因组序列从mock1 gtl3(“B”,“GC) # > GTuplesList对象长度1:# > $ B # > GTuples对象和5 x包含1元数据列:#> seqnames pos1 pos2 pos3 strand | GC #> [1] chr1 6 7 8 8 + | 0.444444 #> [2] chr3 7 8 9 9 10 + | 0.222222 #> [4] chr3 9 10 11 - | 0.111111 #> [5] chr3 10 11 12 - | 0.000000 #>—#> seqinfo:来自mock1基因组的3个序列

尾巴代表牧师,窗口方法的所有行为都与您所期望的一样列表对象。例如,引用的元素窗口现在是列表元素而不是GTuples元素:

代表(gtl3[[1]],倍= 3)# > GTuples对象15 x r3和2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> ... ... ... ... ... ... . ... ...#> [11] chr1 12 3- | 1 1.000000 #> [12] chr2 2 3 4 + | 2 0.888889 #> [13] chr2 3 4 5 + | 3 0.777778 #> [15] chr2 4 56 * | 4 0.666667 #> [15] chr1 56 7 * | 5 0.555556 #> seqinfo: 3 sequence from mock1 genome rev(gtl3) # b> GTuplesList对象的长度2:#> $B #> GTuples对象5 x 3-tuples和2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 6 7 8 + | 6 0.444444 # > [2] chr3 7 8 9 + | 7 0.333333 # > [3] chr3 8 9 10 + | 8 0.222222 # > [4] chr3 9 10 11 - 0.111111 | 9 # > [5] chr3 10 11 12 - 0.000000 | 10  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列头(gtl3 n = 1) # > GTuplesList对象长度1:$ # # > > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列尾(gtl3 n = 1) # > GTuplesList对象长度1:# > $ B # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 6 7 8 + | 6 0.444444 # > [2] chr3 7 8 9 + | 7 0.333333 # > [3] chr3 8 9 10 + | 8 0.222222 # > [4] chr3 9 10 11 - 0.111111 | 9 # > [5] chr3 10 11 12 - 0.000000 | 10  #> --- #> seqinfo: 3从mock1基因组序列窗口(gtl3,开始= 1,结束= 1)# > GTuplesList对象长度1:$ # # > > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 1 2 3 - | 1 1.000000 #> [2] chr2 2 3 4 + | 2 0.888889 #> [3] chr2 3 4 5 + | 3 0.777778 #> [4] chr2 4 56 * | 4 0.666667 #> [5] chr1 56 7 * | 5 0.555556 #>—#> seqinfo:来自mock1基因组的3个序列

3.1.4的基本元组操作GTuplesList对象

的基本元组特征GTuplesList对象可以使用开始结束,元组方法。这些和可用的非常相似GTuples对象,除了它们通常返回一个列表,因为输入现在实际上是一个列表GTuples对象。

警告:当宽度方法是定义良好的,即它返回一个IntegerList\(pos_{m} - pos_{1} + 1\)在美国,这通常不是人们所期望或要求的。相反,请参阅IPD方法,后面将讨论。

start(gtl3) #> IntegerList of length 2 #> [["A"]] 12 3 4 5 #> [["B"]] 6 7 8 9 9 10 10 10 end(gtl3) #> IntegerList of length 2 #> [["A"]] 3 4 5 6 7 #> [["B"]] 8 9 10 11 12 tuples(gtl3) #> length List #> name (2): A B

3.1.4.1Intra-tuple操作

定义的大部分范围内方法GenomicRanges: GRangesList对象目前没有通过扩展来定义GTuples对象,因为范围和元组之间存在差异。那些当前没有定义,并且返回错误消息的对象是:

  • 侧面
  • 启动子
  • 调整
  • 限制

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

转变方法定义良好:

转变(gtl3, 500) # > GTuplesList对象长度2:$ # # > > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1.000000 501 502 503 - | 1 # > [2] chr2 0.888889 502 503 504 + | 2 # > [3] chr2 0.777778 503 504 505 + | 3 # > [4] chr2 504 505 506 * 0.666667 | 4 # > [5] chr1 505 506 507 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ B # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 0.444444 506 507 508 + | 6 # > [2] chr3 0.333333 507 508 509 + | 7 # > [3] chr3 0.222222 508 509 510 + | 8 # > [4] chr3 509 510 511 - 0.111111 | 9 # > [5] chr3 510 511 512 0.000000 - | 10  #> --- #> seqinfo: 3从mock1基因组序列转变(gtl3, IntegerList (A = 300 l, B = 500 l)) # > GTuplesList对象长度2:$ # # > > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1.000000 301 302 303 - | 1 # > [2] chr2 0.888889 302 303 304 + | 2 # > [3] chr2 0.777778 303 304 305 + | 3 # > [4] chr2 304 305 306 * 0.666667 | 4 # > [5] chr1 305 306 307 * 0.555556 | 5  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ B # > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 506 507 508 + | 6 0.444444 #> [2] chr3 507 508 509 + | 7 0.333333 #> [3] chr3 508 509 510 + | 8 0.222222 #> [4] chr3 509 510 511 - | 9 0.111111 #> [5] chr3 510 511 512 - | 10 0.000000 #>——#> seqinfo:来自mock1基因组的3个序列

3.1.4.2Inter-tuple操作

定义的范围间方法GenomicRanges: GRangesList对象当前通过扩展for定义GTuplesList对象,因为范围和元组之间存在差异。那些当前没有定义,并且返回错误消息的对象是:

  • 范围
  • 减少
  • 分离
  • isDisjoint

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

3.1.4.3间隔设置操作GTuplesList对象

没有为之定义的间隔设置操作GenomicRanges: GRangesList对象当前通过扩展for定义GTuplesList对象,因为范围和元组之间存在差异。那些当前没有定义,并且返回错误消息的对象是:

  • punion
  • pintersect
  • psetdiff

如果合适的话,我很乐意添加这些方法,所以如果您对好的定义有建议,请与我联系。

3.1.5循环在GTuplesList对象

GenomicRanges: GRangesList对象,GTuplesList对象中有一系列应用方法。这些包括拉普兰人酸式焦磷酸钠宾州endoapplymendoapply地图,减少.定义的不同循环方法GTuplesList对象用于返回不同类型的结果。标准的拉普兰人而且酸式焦磷酸钠按照惯例行事,用拉普兰人方法返回一个列表酸式焦磷酸钠返回一个更简化的输出:

lapply(gtl3, length) #> $A #> [1] 5 #> #> $B #> [1] 5 sapply(gtl3, length) #> A B #> 5 5

GenomicRanges: GRangesList对象,也有多元版本酸式焦磷酸钠,被称为宾州,定义为GTuplesList对象。并且,如果不希望简化结果,可以调用地图方法,其功能与宾州但在不简化输出的情况下:

gtl3_shift <- shift(gtl3, 10) names(gtl3) <- c("shiftA", "shiftB") mapply(c, gtl3, gtl3_shift) #> $shiftA #> GTuples对象有10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5 # > [6] chr1 11 12 13 - 1.000000 | 1 # > [7] chr2 12 13 14 + | 2 0.888889 # > [8] chr2 13 14 15 + 0.777778 | 3 # > [9] chr2 14 15 16 * 0.666667 | 4 # > [10] chr1 15 16 17 * 0.555556 | 5  #> --- #> seqinfo:3个序列来自mock1基因组#> #> $shiftB #> GTuples对象,包含10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 6 7 8 + | 6 0.444444 # > [2] chr3 7 8 9 + | 7 0.333333 # > [3] chr3 8 9 10 + | 8 0.222222 # > [4] chr3 9 10 11 - 0.111111 | 9 # > [5] chr3 10 11 12 - 0.000000 | 10 # > [6] chr1 16 17 18 + | 6 0.444444 # > [7] chr3 17 18 19 + | 7 0.333333 # > [8] chr3 18 19 20 + | 8 0.222222 # > [9] chr3 19 20 21 - 0.111111 | 9 # > [10] chr3 20 21 22 - | 10 0.000000  #> --- #> seqinfo: 3从mock1基因组序列地图(c,gtl3, gtl3_shift) #> $shiftA #> GTuples object with 10 x 3-tuples and 2 metadata columns: #> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 1 2 3 - | 1 1.000000 #> [2] chr2 2 3 4 + | 2 0.888889 #> [3] chr2 3 4 5 + | 3 0.777778 #> [4] chr2 4 5 6 * | 4 0.666667 #> [5] chr1 5 6 7 * | 5 0.555556 #> [6] chr1 11 12 13 - | 1 1.000000 #> [7] chr2 12 13 14 + | 2 0.888889 #> [8] chr2 13 14 15 + | 3 0.777778 #> [9] chr2 14 15 16 * | 4 0.666667 #> [10] chr1 15 16 17 * | 5 0.555556 #> --- #> seqinfo: 3 sequences from mock1 genome #> #> $shiftB #> GTuples object with 10 x 3-tuples and 2 metadata columns: #> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr1 6 7 8 + | 6 0.444444 #> [2] chr3 7 8 9 + | 7 0.333333 #> [3] chr3 8 9 10 + | 8 0.222222 #> [4] chr3 9 10 11 - | 9 0.111111 #> [5] chr3 10 11 12 - | 10 0.000000 #> [6] chr1 16 17 18 + | 6 0.444444 #> [7] chr3 17 18 19 + | 7 0.333333 #> [8] chr3 18 19 20 + | 8 0.222222 #> [9] chr3 19 20 21 - | 9 0.111111 #> [10] chr3 20 21 22 - | 10 0.000000 #> --- #> seqinfo: 3 sequences from mock1 genome

endoapply方法将返回结果GTuplesList对象,而不是作为列表:

endoapply (gtl3牧师)# > GTuplesList对象长度2:# > $ shiftA # > GTuples对象和5 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 5 6 7 * 0.555556 | 5 # > [2] chr2 4 5 6 * | 4 0.666667 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 2 3 4 + | 2 0.888889 # > [5] chr1 1 2 3 - | 1 1.000000  #> --- #> seqinfo: 3从mock1基因组序列# > # > $ shiftB # > GTuples对象和5 x包含2元数据列:#> seqnames pos1 pos2 pos3 strand | score GC #> [1] chr3 10 11 12 - | 10 0.000000 #> [2] chr3 9 10 11 - | 9 0.111111 #> [3] chr3 8 9 10 + | 8 0.222222 #> [4] chr3 7 8 9 + | 7 0.333333 #> [5] chr1 6 7 8 + | 6 0.444444 #>—#> seqinfo:来自mock1基因组的3个序列

还有一个多元版本的endoapply方法的形式mendoapply方法:

mendoapply(c, gtl3, gtl3_shift) #>长度为2的GTuplesList对象:#> $shiftA #> GTuples对象,包含10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5 # > [6] chr1 11 12 13 - 1.000000 | 1 # > [7] chr2 12 13 14 + | 2 0.888889 # > [8] chr2 13 14 15 + 0.777778 | 3 # > [9] chr2 14 15 16 * 0.666667 | 4 # > [10] chr1 15 16 17 * 0.555556 | 5  #> --- #> seqinfo:3个序列来自mock1基因组#> #> $shiftB #> GTuples对象,包含10个3元组和2个元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 6 7 8 + | 6 0.444444 # > [2] chr3 7 8 9 + | 7 0.333333 # > [3] chr3 8 9 10 + | 8 0.222222 # > [4] chr3 9 10 11 - 0.111111 | 9 # > [5] chr3 10 11 12 - 0.000000 | 10 # > [6] chr1 16 17 18 + | 6 0.444444 # > [7] chr3 17 18 19 + | 7 0.333333 # > [8] chr3 18 19 20 + | 8 0.222222 # > [9] chr3 19 20 21 - 0.111111 | 9 # > [10] chr3 20 21 22 - | 10 0.000000  #> --- #> seqinfo: 3从mock1基因组序列

最后,减少方法将允许GTuples整个物体都要坍塌GTuplesList对象:

减少(c, gtl3) # > GTuples对象10 x包含2元数据列:# > seqnames pos1 pos2 pos3链|得分GC # > [1] chr1 1 2 3 - 1.000000 | 1 # > [2] chr2 2 3 4 + | 2 0.888889 # > [3] chr2 3 4 5 + | 3 0.777778 # > [4] chr2 4 5 6 * | 4 0.666667 # > [5] chr1 5 6 7 * 0.555556 | 5 # > [6] chr1 6 7 8 + | 6 0.444444 # > [7] chr3 7 8 9 + | 7 0.333333 # > [8] chr3 8 9 10 + | 8 0.222222 # > [9] chr3 9 10 11 - 0.111111 | 9 # > [10] chr3 10 11 12 - 0.000000 | 10  #> --- #> seqinfo:mock1基因组3个序列

3.1.6特有的附加方法GTuplesList

就像GTuplesGTuplesList有一些特别定义的方法,但不存在GenomicRanges: GRangesList.这些都是元组大小而且IPD.这些方法与GTuples,除了它们通常返回一个列表,因为输入现在本质上是一个列表GTuples对象。

元组(gtl3) # >长度2 # >名单(2):shiftA shiftB元组(gtl3) [[1]] # > pos1 pos2 pos3 # >[1] 1 2 3 # >[2] 2 3 4 # >[3] 3 4 5 # >[4] 4 5 6 # >[5] 5 6 7大小(gtl3) # > [1] 3 IPD (gtl3) # >长度2 # >名单(2):shiftA shiftB IPD (gtl3) [[1]] # > [1] [2] # > [1] 1 1 # > [2] 1 1 # > [3] 1 1 # > 1 1 # > [4] [5] 1 1

3.2实现细节

GTuplesList类扩展了GenomicRanges: GRangesList类。

4findOverlaps的方法

基因组元组之间或基因组元组与基因组范围之间的“重叠”的定义是所有问题的核心findOverlaps的方法3.findOverlaps基于的方法有findOverlapscountOverlapsoverlapsAny而且subsetByOverlapsGTuples而且GTuplesList对象。

我选择了一个符合我的直觉的定义,即什么构成了基因组元组之间或基因组元组与基因组范围之间的“重叠”。然而,我对在未来版本中修改或扩展这种行为的建议持开放态度GenomicTuples

4.1重叠基因组元组的定义

我认为两个基因组元组是平等的Type = "equal"),如果它们有相同的序列名(seqnames),股()和元组(元组).对于一元组和二元组,这意味着我们可以简单地遵循findOverlaps基于的方法GenomicRanges:农庄而且GenomicRanges: GRangesList对象的继承。但是,我们不能对m-tuples with做同样的事情\(m > 2\)因为这会忽略“内部立场”。因此,我实现了一个特殊的情况findOverlaps时的方法大小\ (> 2 \)而且Type = "equal",这确保“内部位置”也被检查是否相等。

在所有其他情况下,基因组元组被视为基因组范围。这意味着当Type = "any"Type = "start"Type = "end"Type = "within"然后基因组元组被当作基因组范围来处理。具体地说,GTuples(职责。GTuplesList)就好像他们是GenomicRanges:农庄(职责。GenomicRanges: GRangesList),pos1开始而且posm结束

4.2重叠基因组元组和范围的定义

基因组元组是总是在搜索基因组元组和基因组范围之间的重叠时,将其视为基因组范围。

4.3例子

通过学习几个例子,最容易理解上述定义。

首先,对于1元组GTuples方法使用GenomicRanges:农庄方法:

#构造例子1-tuples gt1 < GTuples (seqnames = c(‘chr1’,‘chr1’,‘chr1’,‘chr2’),元组=矩阵(c (10 l, l, 10 l, 10 l), ncol = 1),链= c ('+', '-', '*', '+')) # 农庄的gt1 gr1一起<——(gt1,“农庄”)findOverlaps (gt1, gt1, type = '任何')# >点击对象8支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > [3]2 2 # > [4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4  #> ------- #> queryLength: 4 / subjectLength:4 # GTuples和农庄组织方法相同的相同的(findOverlaps (gt1, gt1, type = '任何'),findOverlaps (gr1一起,gr1一起,type = '任何'))# >[1]真正findOverlaps (gt1, gt1,类型=“开始”)# >点击对象8支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4  #> ------- #> queryLength: 4 / subjectLength:4 # GTuples和农庄组织方法相同的相同的(findOverlaps (gt1, gt1,类型=“开始”),findOverlaps (gr1一起,gr1一起,type = '开始'))# >[1]真正findOverlaps (gt1, gt1,类型=“结束”)# >点击对象8支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4  #> ------- #> queryLength: 4 / subjectLength:4 # GTuples和农庄组织方法相同的相同的(findOverlaps (gt1, gt1,类型=“结束”),findOverlaps (gr1一起,gr1一起,类型=“结束”))# >[1]真正findOverlaps (gt1, gt1,类型=“内”)# >点击对象8支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4  #> ------- #> queryLength: 4 / subjectLength:4 # GTuples和农庄组织方法相同的相同的(findOverlaps (gt1, gt1,类型=“内”),findOverlaps (gr1一起,gr1一起,type = '在'))# >[1]真正findOverlaps (gt1, gt1,类型=“平等”)# >点击对象8支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4  #> ------- #> queryLength: 4 / subjectLength:4 # GTuples和GRanges方法完全相同(findOverlaps(gt1, gt1, type = 'equal'), findOverlaps(gr1, gr1, type = 'equal')) #> [1] TRUE #可以传递其他参数,例如选择和忽略。strand finoverlaps (gt1, gt1, type = 'equal',忽略。strand = TRUE, select = 'last') #> [1] 3 3 3 3

接下来,对于二元组GTuples方法使用GenomicRanges:农庄方法:

#构建示例集合gt2 < GTuples (seqnames = c(‘chr1’,‘chr1’,‘chr1’,‘chr1’,‘chr2’),元组=矩阵(c (10 l, l, 10 l, 10 l, 10 l, 20 l, 20 l, 20 l, 25 l, 20 l), ncol = 2),链= c ('+', '-', '*', '+', '+')) # 农庄的版本gt2 gr2 <——(gt2,“农庄”)findOverlaps (gt2 gt2, type = '任何')# >点击对象有13支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 4 # > [2]1 1 # > [3]1 3 # > [4]2 2 # > [5]2 3  #> ... ... ...3 3 # # > [9] > [10] 4 4 # > 4 1 # > [11] [12] 4 3 # > [13] 5 5  #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和农庄组织方法相同的相同(findOverlaps (gt2 gt2, type = '任何'),findOverlaps (gr2 gr2, type = '任何'))# >[1]真正findOverlaps (gt2 gt2, type = '开始')# >点击对象有13支安打,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 4 # > [2]1 1 # > [3]1 3 # > 2 2 # > [4][5]2 3  #> ... ... ...#> [9] 3 3 #> [10] 4 4 #> [11] 4 1 #> [12] 4 3 #> b[13] 5 5 #> ------- # b> queryLength: 5 / subjectLength: 5 # GTuples和GRanges方法完全相同(findOverlaps(gt2, gt2, type = 'start'), findOverlaps(gr2, gr2, type = 'start')) #> [1] TRUE findOverlaps(gt2, gt2, type = 'end') #>命中对象,9命中,0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4 # > [9]5 5  #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和农庄组织方法相同的相同(findOverlaps (gt2、gt2、类型=“结束”),findOverlaps (gr2、gr2、类型=“结束”))# >[1]真正findOverlaps (gt2、gt2类型=“中”)与11支安打和0 # >点击对象元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 4 # > [2]1 1 # > [3]1 3 # > 2 2 # > [4][5]2 3 # > [6]3 4 # > 3 1 # > [7][8]3 2 # > [9]3 3 # > [10]4 4 # > [11]5 5  #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和农庄组织方法相同的相同(findOverlaps (gt2、gt2类型=“中”),findOverlaps (gr2 gr2, type = '在'))# >[1]真正findOverlaps (gt2、gt2、类型=“平等”)与9支安打,0 # >点击对象元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 1 # > [2]1 3 # > 2 2 # > [3][4]2 3 # > 3 1 # > [5][6]3 2 # > 3 3 # > [7][8]4 4 # > [9]5 5  #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和农庄组织方法相同的相同(findOverlaps (gt2、gt2、类型=“平等”),findOverlaps (gr2 gr2, type = ' = ')) # >[1]真正的#可以通过其他参数,如选择和忽视。strand finoverlaps (gt2, gt2, type = 'equal',忽略。strand = TRUE, select = 'last') #> [1] 3 3 3 4

最后,对于m-tuples with\(m > 2\)在哪里GTuples方法使用GenomicRanges:农庄方法除非Type = "equal"

#构造示例3元组gt3 <- GTuples(seqnames = c('chr1', 'chr1', 'chr1', 'chr1', 'chr2'), tuples = matrix(c(10L, 10L, 10L, 10L, 20L, 20L, 20L, 25L, 20L, 30L, 30L, 30L, 35L, 30L, 30L), ncol = 3), strand = c('+', '-', '*', '+', '+')) # GRanges版本的gt3 gr3 <- as(gt3, "GRanges") finoverlaps (gt3, gt3, type = 'any') #>在.local(查询,主题,maxgap, minoverlap, type, select,…):#> queryHits subjectHits #>   # b> [1] 13 #> [2] 1 1 #> [3] 1 4 #> [4] 2 3 #> [5] 2 2 #> ... ... ...#> [9] 3 4 #> [10] 4 3 #> [11] 4 1 #> [12] 4 4 #> b[13] 5 5 #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和GRanges方法完全相同(findOverlaps(gt3, gt3, type = 'any'), findOverlaps(gr3, gr3, type = 'any')) # TRUE # b>在.local(查询,主题,maxgap, minoverlap, type, select,…)'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #> [1] TRUE finoverlaps (gt3, gt3, type = 'start') #>在.local(查询,主题,maxgap, minoverlap, type, select,…):'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #> Hits对象有13个Hits和0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 3 # > [2]1 1 # > [3]1 4 # > [4]2 3 # > [5]2 2  #> ... ... ...#> [9] 3 4 #> [10] 4 3 #> [11] 4 1 #> [12] 4 4 #> b[13] 5 5 #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和GRanges方法完全相同(findOverlaps(gt3, gt3, type = 'start'), findOverlaps(gr3, gr3, type = 'start')) # TRUE # b>在.local(query, subject, maxgap, minoverlap, type, select,…)'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #> [1] TRUE finoverlaps (gt3, gt3, type = 'end') #> .local(查询,主题,maxgap, minoverlap, type, select,…):'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #> Hits对象与7个Hits和0元数据列:#> queryHits subjectHits #>   #> [1] 1 1 #> b[2] 1 4 #> [3] 2 2 #> b[4] 3 3 #> [5] 4 #> [6] 4 #> [7] 5 5 #> ------- #> queryLength: 5 / > [6] 4 #> [7] 5 5 #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples and GRanges methods same same (finoverlaps (gt3, gt3, type = 'end'), findOverlaps(gr3, gr3, type = 'end')) # TRUE #> .local(query, subject, maxgap, minoverlap, type, select,…)'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #> [1] TRUE finoverlaps (gt3, gt3, type = 'within') #>警告在.local(查询,主题,maxgap, minoverlap,类型,选择,…):'type' #>不是'equal',因此强制'query'和'subject'到'GRanges'对象(详细信息见docs #>) #>命中对象与10个命中和0元数据列:# > queryHits subjectHits # > <整数> <整数> # > [1]1 3 # > [2]1 1 # > [3]1 4 # > [4]2 3 # > [5]2 2 # > 3 3 # > [6][7]4 3 # > 4 1 # > [8][9]4 4 # > [10]5 5  #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples和农庄组织方法相同的相同(findOverlaps (g3,及至类型=“中”),findOverlaps (gr3 gr3, type = '在'))#真正的# >警告。local(查询、主题maxgap, minoverlap、类型选择、…): 'type' #> is not 'equal' so coercing 'query' and 'subject' to 'GRanges' objects (see docs #> for details) #> [1] TRUE findOverlaps(gt3, gt3, type = 'equal') #> Hits object with 5 hits and 0 metadata columns: #> queryHits subjectHits #>   #> [1] 1 1 #> [2] 2 2 #> [3] 3 3 #> [4] 4 4 #> [5] 5 5 #> ------- #> queryLength: 5 / subjectLength: 5 # GTuples and GRanges methods **not** identical because GRanges method ignores # "internal positions". identical(findOverlaps(gt3, gt3, type = 'equal'), findOverlaps(gr3, gr3, type = 'equal')) # FALSE #> [1] FALSE # Can pass other arguments, such as select and ignore.strand findOverlaps(gt3, gt3, type = 'equal', ignore.strand = TRUE, select = 'last') #> [1] 2 2 3 4 5

5基因组元组比较

我选择了一个符合我直觉的定义
基因组元组比较。然而,我对在未来版本中修改或扩展这种行为的建议持开放态度GenomicTuples

5.1基因组元组比较方法的定义

两个基因组元组的比较,x而且y,是通过首先比较seqnames (x)seqnames (y),然后链(x)链(y)最后元组(x)元组(y)

的顺序seqnames而且是执行的GenomicRanges:农庄.的顺序元组是元素的,即。\(pos_{1}, \ldots, pos_{m}\)依次比较。例如,Chr1:+: 10,20,30被认为小于Chr1:+: 10,20,40.这就定义了我所说的基因组元组的“自然秩序”。

以上是在pcompare方法GTuples,它对两者进行“广义范围比较”GTuples对象,x而且y.也就是说,pcompare (x, y)返回一个整数向量,其中\ (^ {th} \)元素是描述如何\ (^ {th} \)元素x质量定位相对于\ (^ {th} \)元素y.代码是< 0= 0,或> 0,对应于X [i] < y[i]X [i] == y[i],或X [i] > y[i],分别。

6个传统的二进制比较运算符(= =! =< => =<,>),其他比较运算符(匹配订单排序,排名)和基于重复的方法(复制而且独特的)都使用这种“自然秩序”。

5.2例子

通过学习几个例子,最容易理解上面的定义,这里使用3元组:

#构造示例3-元组gt3 <- GTuples(seqnames = c('chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', 'chr1', ' ch2 ', ' 5L, 10L, 20L, 20L, 20L, 20L, 25L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 30L, 35L, 30L, 30L, 30L, 30L, 30L, 35L, '+', '+', '+', '+'),矩阵(c) gt3 #> GTuples对象,7个3元组,0个元数据列:#> seqnames pos1 pos2 pos3 strand #> [1] chr1 10 20 30 + #> [2] chr1 10 20 30 - #> > [3] chr1 10 20 20 + #> [4] chr1 10 25 30 + #> [6] chr1 5 20 30 + #> [7] chr1 10 20 35 + #>—#> seqinfo: 2个来自未指定基因组的序列;no seqlength# pcompare每个元组与自身pcompare(gt3, gt3) #> [1] 0 0 0 0 0 0 0 gt3 < gt3 #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE gt3 > gt3 #> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE # pcompare(gt3[3], >),g3) # > [1] 2 [3] 1 0 2 1 2 2 g3 # > < g3[1]假假假假真假假g3 [3] # > > g3[1]真的真的假的真的假的真真正g3 [3] # > = = g3真正[1]假假假假假假# #一些比较元组差异只在一个坐标#排序seqnames #“chr1”<“chr2”与否则完全相同的元组坐标g3 [1] [5] < g3 #真正的# >[1]真正的#链的顺序  # '+' < '-' < '*' 与否则完全相同的元组量g3 [1] [2] < g3 #TRUE #> [1] TRUE gt3[1] < gt3[2] # TRUE #> [1] TRUE gt3[1] < unstrand(gt3[2]) # TRUE #> [1] TRUE gt3[2] < unstrand(gt3[2]) # TRUE #> [1] TRUE #元组排序#从pos1依次检查元组,…,posm为元组with otherwise # identical coordinates gt3[6] < gt3[1] # TRUE due to pos1 #> [1] TRUE gt3[2] < gt3[4] # TRUE due to pos2 #> [1] FALSE gt3[1] < gt3[7] # TRUE due to pos3 #> [1] TRUE # Sorting of tuples # Sorted first by seqnames, then by strand, then by tuples sort(gt3) #> GTuples object with 7 x 3-tuples and 0 metadata columns: #> seqnames pos1 pos2 pos3 strand #> [1] chr1 5 20 30 + #> [2] chr1 10 20 30 + #> [3] chr1 10 20 35 + #> [4] chr1 10 25 30 + #> [5] chr1 10 20 30 - #> [6] chr1 10 20 35 * #> [7] chr2 10 20 30 + #> --- #> seqinfo: 2 sequences from an unspecified genome; no seqlengths # Duplicate tuples # Duplicate tuples must have identical seqnames, strand and positions (tuples) duplicated(c(gt3, gt3[1:3])) #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE unique(c(gt3, gt3[1:3])) #> GTuples object with 7 x 3-tuples and 0 metadata columns: #> seqnames pos1 pos2 pos3 strand #> [1] chr1 10 20 30 + #> [2] chr1 10 20 30 - #> [3] chr1 10 20 35 * #> [4] chr1 10 25 30 + #> [5] chr2 10 20 30 + #> [6] chr1 5 20 30 + #> [7] chr1 10 20 35 + #> --- #> seqinfo: 2 sequences from an unspecified genome; no seqlengths

6确认

我非常感谢所有的Bioconductor开发者,但尤其要感谢的开发者2021欧洲杯体育投注开户GenomicRanges劳伦斯等人。用于计算和注释基因组范围的软件。公共科学图书馆第一版。中国生物医学工程学报,2013,31(2)。),这GenomicTuples大量使用和基于。特别感谢Hervé Pagès在上游更改时提供的帮助和修复GenomicRanges

7会话信息

这是的输出sessionInfo在编译本文件的系统上:

sessionInfo() #> R version 4.1.0(2021-05-18) #>平台:x86_64-pc-linux-gnu (64-bit) #>运行在:Ubuntu 20.04.2 LTS #> #>矩阵产品:默认#> BLAS: /home/biocbuild/bbs-3.13-bioc/R/lib/libRblas。所以#> LAPACK: /home/biocbuild/bbs-3.13-bioc/R/lib/libRlapack。so #> #> locale: #> [1] LC_CTYPE=en_US。UTF-8 LC_NUMERIC= c# > [3] LC_TIME=en_GB LC_COLLATE= c# > [5] LC_MONETARY=en_US。utf - 8 LC_MESSAGES = en_US。UTF-8 #> [7] LC_PAPER=en_US。UTF-8 LC_NAME= c# > [9] LC_ADDRESS=C LC_TELEPHONE= c# > [11] LC_MEASUREMENT=en_US。UTF-8 LC_IDENTIFICATION= c# > #>附加基础包:#>[1]并行stats4 stats graphics grDevices utils datasets #>[8]方法基础#> #>其他附加包:#> [1]genome tuples_1 .26.0 genome ranges_1 .44.0 GenomeInfoDb_1.28.0 #> [1] [4] IRanges_2.26.0 S4Vectors_0.30.0 BiocGenerics_0.38.0 #> [7] BiocStyle_2.20.0 #> #>通过命名空间加载(且未附加):#> [1] Rcpp_1.0.6 XVector_0.32.0 knitr_1.33 #> [4] magrittr_2.0.1 zlibbioc_1.38.0 R6_2.5.0 #> [7] rlang_0.4.11 string_1 .4.0 tools_4.1.0 #> [10] data.table_1.14.0 xfun_0.23 jquerylib_0.1.4 #> [13] htmltools_0.5.1.1 yaml_2.2.1 digest_0.6.27 #> [16] bookdown_0.22 GenomeInfoDbData_1.2.6 BiocManager_1.30.15 #> [19] bitops_1.0-7 sass_0.4.0 RCurl_1.98-1.3 #> [25] compiler_4.1.0 bslib_0.2.5.1 jsonlite_1.7.2

8参考文献