2016-01-14 8 views
0

даны два GenomicRanges, как:R, GenomicRanges: найти ширину перекрытия диапазонов геномных

library(GenomicRanges) 

gr1 <- 
    makeGRangesFromDataFrame(
    data.frame(
     chr = c("1","1","2","2"), 
     start = c(10,50,10,50), 
     end = c(20,60,20,60) 
    ) 
) 

gr2 <- 
    makeGRangesFromDataFrame(
    data.frame(
     chr = c("2","2","3","3"), 
     start = c(15,40,10,50), 
     end = c(25,55,20,60) 
    ) 
) 

мне нужно найти перекрытия размер (ширину) перекрывающихся сегментов. В моем случае это было бы 5 (для gr1 [3] и gr2 1) и 5 ​​(для gr [4] и gr2 [2]). Приведенное решение here с помощью ranges() на классе хит не соответствует классу GenomicRanges (кажется):

mm <- findOverlaps(gr1,gr2) 
ranges(mm,gr1,gr2) 

Ошибка в .local (х, ...): «запрос» должен быть Изменяется длины, равной числу запросов

Нужно было бы указать параметр GenomicRanges::subsetByOverlaps(), который буквально срезает и возвращает перекрытие.

UPDATE (смотри ниже): решение находится в самом, GenomicRanges::intersect() пакет, так:

width(intersect(gr1, gr2)) 
+0

Это - http://stackoverflow.com/a/33272941/ 496803 - и впоследствии связанный ответ на любую помощь? – thelatemail

ответ

0

Пакет GenomicRanges имеет определенную функцию для этого, кажется, intersect(). Таким образом, решение довольно простое:

width(intersect(gr1, gr2)) 

[1] 6 6

(что правильно)