【问题标题】:Subtracting two GRanges objects from each other将两个 Granges 对象相减
【发布时间】:2014-08-31 21:23:34
【问题描述】:

我环顾四周,似乎之前没有发布任何关于此的问题。我有两个带有一些坐标的 GRanges 对象,我想从另一个中减去一个的间隔。这与使用 findOverlaps() 或 intersect() 查找重叠不同。

例如:

granges.in 

seqnames ranges$start ranges$end

chr01 1100 2000

chr01 2100 3000

chr02 1000 4000

chr03 1500 3500

granges.out

seqnames ranges$start ranges$end

chr01 1000 1200

chr02 2500 3000

chr03 1500 2000

chr03 3000 3500

我想要:

granges.ref

seqnames ranges$start ranges$end

chr01 1200 2000

chr01 2100 3000

chr02 1000 2500

chr02 3000 4000

chr03 2000 3000

以下工作,但它非常笨拙,我必须逐个染色体地做,因为每个染色体的间隔数在两个对象之间不匹配。

setdiff(ranges(genome.ref[seqnames(granges.in) == "chr01"]), ranges(interval[seqnames(granges.out)== "chr01"]))

有没有一种更快、更有效的方法来整体使用这两个 GRanges 对象?谢谢!

【问题讨论】:

  • 你应该问biostars.org
  • setdiff 也适用于 GRange 对象 - 这不是您想要的吗?
  • 嗨 Gavin 感谢您的建议。我已经尝试过了,但它只给出不重叠的范围,直到它达到与 setdiff() 中的第一项相同的范围数量 - 它实际上并没有改变每个间隔的开始和结束位置
  • 奇怪,如果我这样做 x <- GRanges(c(1,1,2,3),IRanges(c(1100,2100,1000,1500), c(2000,3000,4000,3500)))y <- GRanges(c(1,2,3,3), IRanges(c(1000,2500,1500,3000), c(1200,3000,2000,3500)))) 然后 setdiff(x,y) 大致满足您的要求。对你来说不是吗 - 也许检查你是否有最新版本的软件包?
  • 您是否尝试在 setdiff() 中使用“ignore.strand=TRUE”参数?这可能会导致类似于上述问题的问题,因为 setdiff 是特定于链的(这也是它仅在范围上执行时有效的原因 - 因为您删除了链信息。)

标签: r bioinformatics range bioconductor genome


【解决方案1】:
setdiff(x, y, ignore.strand=TRUE) 

可以工作。 同样, plyranges 库也很容易使用 GRanges。

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 2011-11-17
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多