我将从一个示例开始,然后描述我尝试使用的逻辑。
我有两个IRanges跨越相同总范围的普通对象,但可能在不同数量的范围内这样做。每个IRanges人都有一个mcol,但那mcol是不同的IRanges。
a
#IRanges object with 1 range and 1 metadata column:
# start end width | on_betalac
# <integer> <integer> <integer> | <logical>
# [1] 1 167 167 | FALSE
b
#IRanges object with 3 ranges and 1 metadata column:
# start end width | on_other
# <integer> <integer> <integer> | <logical>
# [1] 1 107 107 | FALSE
# [2] 108 112 5 | TRUE
# [3] 113 167 55 | FALSE
您可以看到这两个IRanges范围都从 1 到 167,但a只有一个范围和b三个范围。我想将它们结合起来得到这样的输出:
my_great_function(a, b)
#IRanges object with 3 ranges and 2 metadata columns:
# start end width | on_betalac on_other
# <integer> <integer> <integer> | <logical> <logical>
# [1] 1 107 107 | FALSE FALSE
# [2] 108 112 5 | FALSE TRUE
# [3] 113 167 55 | FALSE FALSE
输出disjoin与输入类似,但它保留mcols,甚至扩展它们,以使输出范围与mcol导致它的输入范围具有相同的值。