• R语言
  • 求助data.table中的foverlap()函数。

在学data.table包,看到foverlaps()这个函数,一直搞不懂这个函数的连接机理是什么?有什么用?大神能不能举个应用的例子。

x <- data.table(start = c(5, 31, 22, 16),
                end = c(8, 50, 25, 18),
                val2 = 7:10)
y <- data.table(start = c(10, 20, 30),
                end = c(15, 35, 45),
                val1 = 1:3)
setkey(y, start, end)
foverlaps(x, y, type = 'any')

这个是书中的例子,我就是看不懂,为什么会输出这个结果。

    maodao 这是我唯一常用但 base R 搞起来效率低的 data.table 包函数。最常见例子就是匹配有测量误差的两组数据,用你这个例子就是说 x 里测定了四个数,标记为 7,8,9,10,每个数考虑测量误差其实是一个范围,也就是5-8,31-50,22-25,16-18。同样的你测量了y里的三个数,也是三个范围 10-15,20-35,30-45,标记为1,2,3。现在你想知道 x 与 y 每个范围互相重叠的部分,这时候用 foverlaps 了,输出结果就是 x 中的标记为8的范围31-50与y中标记为2,3的范围20-35,30-45有重叠,x中标记为9的范围22-25与y中标记为2的范围20-35有重叠,可以定义不同的类型,例如只返回包含式重叠或只返回第一个重叠段的标记等。

    如果你做测序或芯片表达,这个应用场景就更明确了,那就是比对两条序列多条片段或不同染色体上的重合部分,另外通常一个基因会测十几个片段,那么如果其中大部分片段都对上了,即使存在位点突变也可以认为测到了,当然这里面有很多质控的问题。现在如果不懂也没关系,等实际遇到这种范围比对的问题时,爆栈上一搜就结果能收敛到这个函数(还有一个是Bioc上的包,不做生信估计也不会用到)。

      yufree  有点明白了,就是看测量范围的重叠情况。x, y,中的start,end是不是可以理解为,对某个变量的观察对象多次测量,得出的一个范围值,这个函数主要看,x,y的范围有没有重叠,有重叠或者重叠程度深是不是代表他们有可能是位于同一位点?我这样理解对不对大神.也就是说这个函数多用来检测多次测量得出的其因位点突变是不是同一位点。或者精度高的仪器测量值的检验,可部分替代统计检验。

        maodao 是的,重叠比较多说明其可能来自同一段基因或功能相似的序列。这里不涉及统计检验,就是回答重叠与否或者对齐数据的问题,例如我测了两张床的长宽高,考虑误差后比较范围重叠就可以知道这两张床是不是同一批次的产品或者直接用来对产品进行质量控制,找出跑偏的产品,析因后改进工艺。