【问题标题】:printing a list based on range met根据满足的范围打印列表
【发布时间】:2014-04-15 08:01:53
【问题描述】:

如果满足某些值,我想将字符串输出生成到列表中。我有一个看起来像这样的表:

grp      V1  V2  V3  V4  V5 V6 V7 V8 V9 V10 V11   V12   V13 V14 V15 V16 V17
1:   1 go.1 142 144 132 134  0  31 11  F   D  T   hy     al qe  34   6   3
2:   2 go.1 313 315 303 305  0  31 11  q   z  t   hr     ye er  29  20  41
3:   3 go.1 316 318 306 308  0  31 11  f   w  y   hu     er es  64  43  19
4:   4 go.1 319 321 309 311  0  31 11  r   a  y   ie     uu qr  26  22  20
5:   5 go.1 322 324 312 314  0  31 11  g   w  y   hp     yu re  44   7   0

我正在使用此函数来生成所需的输出:

library(IRanges); library(data.table)
rangeFinder = function(x){  
  x.ir = reduce(IRanges(x$V2, x$V3))
  max.idx = which.max(width(x.ir))
  ans = data.table(out = x[1,1], 
             start = start(x.ir)[max.idx], 
             end = end(x.ir)[max.idx])
return(ans)}

rangeFinder(x.out)
          out start end
1:          1   313 324

我还想在 rangeFinder 的开始和结束输出之间生成一个包含字母(来自 V9-V11 列)的列表。

例如,输出应如下所示。

out
[[go.1]]
[1]     "qztfwyraygwy"

rangeFinder 正在查看 V2 和 V3 列中的值并打印最长匹配的数字。请注意,即使 rangeFinder 从 313-324(而不是从 142-324)生成输出,列表输出中也不包含“FDT”。如何获得所需的输出?

【问题讨论】:

    标签: r list data.table iranges


    【解决方案1】:

    reduce 有一个参数with.revmap 用于向对象添加“元数据”列(可通过mcols() 访问)。这将映射到缩小范围的原始范围的索引与每个缩小范围相关联,作为IntegerList 类,基本上是一个保证所有元素都是整数向量的列表。所以这些是你感兴趣的行

    ir <- with(x, IRanges(V2, V3))
    r <- reduce(ir, with.revmap=TRUE)
    i <- unlist(mcols(r)[which.max(width(r)), "revmap"])
    

    并且数据字符串可以用类似的东西来修改

    j <- paste0("V", 9:11)
    paste0(as.matrix(x[i, j, drop=FALSE]), collapse="")
    

    最好在 Bioconductor mailing list 上询问有关 IRange 的问题;无需订阅。

    with.revmap 是最近添加的便利参数;我觉得

    h = findOverlaps(ir, r)
    i = queryHits(h)[subjectHits(h) == which.max(width(r))]
    

    是替代品。

    【讨论】:

    • 看来我没有with.revmap 的功能,我收到了这个错误。 .local(x, ...) 中的错误:未使用的参数(with.revmap = TRUE)
    • @user3141121 是的,这是当前的 Bioconductor,在使用 R-3.1 时可用(从昨天开始!)
    • 我明白了。 3.0的任何解决方法?我不想更新,因为我的所有其他库也需要更新
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多