2016-12-01 148 views
0

我在循环GRanges列表时遇到问题。遍历GRanges列表中的对象R

feature包含对象的列表:

feature file: 

... 

$Pol3 
GRanges object with 205 ranges and 0 metadata columns: 
     seqnames     ranges strand 
     <Rle>    <IRanges> <Rle> 
    1  chr1 [ 16545569, 16546385]  * 
    2  chr1 [ 16678151, 16678447]  * 
    3  chr1 [ 93847201, 93848017]  * 
    4  chr1 [146039330, 146039547]  * 
    5  chr1 [146038406, 146038434]  * 
    ...  ...     ... ... 
    180  chr8 [ 66112999, 66114487]  * 
    181  chr8 [ 95269339, 95270155]  * 
    182  chr8 [123157081, 123157461]  * 
    183  chrX [ 18674543, 18675359]  * 
    184  chrX [137437934, 137438750]  * 
    ------- 
    seqinfo: 17 sequences from an unspecified genome; no seqlengths 

$FOS 
GRanges object with 14383 ranges and 0 metadata columns: 
      seqnames     ranges strand 
      <Rle>    <IRanges> <Rle> 
     [1]  chr1  [ 778602, 778872]  * 
     [2]  chr1  [ 966089, 966373]  * 
     [3]  chr1  [1000738, 1001022]  * 
     [4]  chr1  [1064238, 1064508]  * 
     [5]  chr1  [1080197, 1080467]  * 
     ...  ...     ... ... 
    [14379]  chrX [155026485, 155026769]  * 
    [14380]  chrX [155068168, 155068452]  * 
    [14381]  chrX [155216229, 155216464]  * 
    [14382]  chrX [155881129, 155881399]  * 
    [14383]  chrX [155888227, 155888497]  * 
    ------- 
    seqinfo: 23 sequences from an unspecified genome; no seqlengths 

...

和我interval是这样的:

GRanges object with 6 ranges and 1 metadata column: 
     seqnames    ranges strand |   id 
     <Rle>   <IRanges> <Rle> | <character> 
    [1]  chr1 [ 8409137, 8409637]  * | region1 
    [2]  chr1 [ 8789220, 8789720]  * | region1 
    [3]  chr1 [ 9615503, 9616003]  * | region1 
    [4]  chr1 [10960926, 10961426]  * | region1 
    [5]  chr1 [11797718, 11798218]  * | region1 
    [6]  chr1 [12434198, 12434698]  * | region1 
    ------- 
    seqinfo: 23 sequences from an unspecified genome; no seqlengths 

对于特征文件中的每个对象(例如$ FOS)我能做

mtch = findOverlaps(interval, feature$FOS) 
myRanges = ranges(mtch,ranges(interval),ranges(feature$FOS)) 

一切都很好,每个对象一个接一个,但是当我尝试使用lapply,第二步不起作用

mtch <- lapply(feature, function(x) findOverlaps(x, interval)) 

myRanges = ranges(mtch,ranges(currmySegm),ranges(feature)) 

我得到:

Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function 'ranges' for signature '"list"' 

OR

myRanges = ranges(mtch,ranges(interval),lapply(feature, function(x) ranges(x))) 
Error in (function (classes, fdef, mtable) : 
    unable to find an inherited method for function 'ranges' for signature '"list"' 

非常感谢帮助我

+0

你需要在'myRanges =范围(MTCH使用'lapply',范围(currmySegm),范围(功能))'因为这是一个列表 – emilliman5

+0

@ emilliman5,谢谢你的回复。在这种情况下,请让我知道如何使用lapply?我尝试了很多方法,但都没有工作 – user6013305

+0

如果你可以做一个简单的例子,使用'dput'我们可以做更多的事情来帮助。但正如我所看到的那样,'mtch'是一个列表,'features'是一个需要循环的列表。目前还不清楚currmySegm来自哪里。我假设你想要'range(mtch [[i]],范围(interval),范围(features [[i]]))''。 – emilliman5

回答

0

Step tw Ø应该是这样的假设你想从比赛和原田庄对象范围:

lapply(seq_along(mtch), function(i){ 
    ranges(mtch[[i]], ranges(interval), ranges(features[[i]])) 
}) 
+0

反正有分享我的文件吗?我在.local(x,...)中得到一个新的错误错误: 'query'必须是一个等于查询数量的长度范围 – user6013305

+0

也许你可以先解释你正在尝试做什么。我了解'findOverlaps'调用,但不是'范围'的范围' – emilliman5

+0

谢谢,问题解决了 – user6013305