我有一个脚本,目的是检测沿着染色体的基因之间的差距,这些间隙的坐标,并为这个缺口指定一个类别。
它以这种格式接受一个输入文件:
Chr start finish dir
chrI 335 649 +
chrI 538 792 +
chrI 1807 2169 -
chrI 2480 2707 +
chrI 7235 9016 -
chrI 10091 10399 +
chrI 11565 11951 -
chrI 12046 12426 +
chrI 13363 13743 -
chrI 21566 21850 +
chrI 22395 22685 -
chrI 24000 27968 -
chrI 31567 32940 +
chrI 33448 34701 +剧本:
k = 0;
for i=1:(length(start)-1)
if start(i+1)<finish(i)
continue
else
end
k = k+1;
IGR(k,1) = finish(i)+1;
IGR(k,2) = start(i+1)-1;
if dir{i}=='+' && dir{i+1}=='-'
type{k,1} = 'Convergent';
end
if dir{i}=='+' && dir{i+1}=='+'
type{k,1} = 'Tandem';
end
if dir{i}=='-' && dir{i+1}=='+'
type{k,1} = 'Divergent';
end
if dir{i}=='-' && dir{i+1}=='-'
type{k,1} = 'Tandem';
end
end这对上面的输入很有效,但是如果超过2个基因重叠,则确定相邻基因是否重叠if start(i+1)<finish(i)的检查失败。当输入数据按start排序时,下面的输入无法正确工作,因此它无法检测到第三个基因重叠于第一个基因,只有当基因2和3重叠时才进行检查。
chrII 280 2658 -
chrII 646 1128 +
chrII 2582 2899 -
chrII 2997 5009 -
chrII 5790 6125 +
chrII 7605 7733 -期望的输出是系统检测基因1-3相互重叠,从而忽略它们--基因3和基因4之间的第一个间隙被检测到:

红色区块代表了我试图检测到的区域,同时忽略了重叠的基因(因为它们不会产生缝隙)。蓝色块显示chrII开始时的每个单独的基因。
有没有人有更有力的方法来检查重叠的建议?
编辑
我的完整输入文件中有按染色体排序的基因,即:
Chr start finish dir
chrI 335 649 +
chrI 538 792 +
chrI 1807 2169 -
chrI 2480 2707 +
chrI 7235 9016 -
chrII 280 2658 -
chrII 646 1128 +
chrII 2582 2899 -
chrII 2997 5009 -
chrII 5790 6125 +
chrII 7605 7733 -任何检测重叠的方法都不能跨越染色体边界,一旦chrI结束,chrII开始,就必须更新过程,使chrI上的最后一个基因不能与chrII上的第一个基因进行检测。
发布于 2015-06-17 10:59:31
将脚本的第3行更改为
if start(i+1)<max(finish(1:i))使用第二组示例数据,我得到以下输出:
2900-2996: Tandem
5010-5789: Divergent
6126-7604: Convergent这就是你想要的?
巴勒
发布于 2015-06-17 10:48:54
从您的问题中,我假设您已经在两个向量中得到了每个范围的开始值和结束值:
start = [ 280
646
2582
2997
5790
7605 ];
finish = [ 2658
1128
2899
5009
6125
7733 ];现在,的两个范围重叠当且仅当每个区域在完成之前就开始了。所以
overlap = bsxfun(@lt, start(:), finish(:).'); %'// or @le to include equality
overlap = overlap & overlap.';给出一个正方形对称矩阵overlap,使得overlap(m,n)是1如果距离m和n重叠。您可能希望删除对角线(范围显然与其本身重叠,但这并不有趣):
overlap(1:numel(start)+1:end) = 0;对于示例输出,结果是
overlap =
0 1 1 0 0 0
1 0 0 0 0 0
1 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0这告诉您范围1和2重叠,也范围1和3重叠(注意,范围2和3不重叠)。
https://stackoverflow.com/questions/30889024
复制相似问题