【问题标题】:Determining length of a part of a DNA sequence确定部分 DNA 序列的长度
【发布时间】:2016-02-09 16:24:15
【问题描述】:

我得到了一个 DNA 序列,例如:

ATTAGGGCCCATTACGCTGACGAGCACTTG

我需要编写一个函数,给定两个输入(DNA 序列和 A、C、G 或 T)确定仅包含特定字母的序列的最长可能部分的长度。

dna = 'ATTAGGGCCCATTACGCTGACGAGCACTTG';
giveLength(dna, 'A') 
ans = 
       1
giveLength(dna, 'C') 
ans = 
       3    

我是这样开始的:

function length = giveLength(sequentce, amino)
[begin, end] = regexp(sequentie, amino , 'start', 'end')
pos = 1;                            
if isempty(begin)
    error('Doesn't exist!')
else
for i = 1:length(begin)
    if begin(i) ~= end(i)          
        if (end(i) - begin(i)) > (end(i) - begin(i)) || (end(i) - begin(i)) > 1
            pos = end(i) - begin(i);
        end
    end
end
length = pos;
end

显然这是行不通的,因为每个字母的开始和起始位置都是相同的,我也不能写amino+让它选择对应的部分。

我们将不胜感激!

【问题讨论】:

    标签: regex matlab


    【解决方案1】:

    你可以从起始向量中减去 end 来得到匹配字符串的长度。找到最大值给出最大长度。这个也更通用一点,你可以给它传递一个序列,例如'AG',它会返回该模式的重复次数......

    function len = giveLength(sequence, amino)
    [begin_i, end_i] = regexp(sequence, sprintf('(%s)+', amino) , 'start', 'end');
    if isempty(begin_i)
        error('Doesn''t exist!')
    else
    len = (max(end_i - begin_i) + 1) / numel(amino);
    

    顺便说一句,尽量避免使用变量名,例如lengthend 等,它们要么是内部函数,要么是关键字。

    【讨论】:

    • 谢谢,这行得通!是的,虽然我没有在我的真实脚本中使用这些变量。我只将它们翻译成英文,然后忘记命名它们。不过感谢您的提示!
    【解决方案2】:

    我会 use this answer 并根据您的需要进行调整。

    J=find(diff([dna(1)-1, dna]));
    repetition=diff([J, numel(numCode)+1]);
    symbol=dna(J)
    

    现在已经完成了这个小预处理,您可以查询某个符号的长度

    max(repetition(symbol=='C'))
    

    【讨论】:

      猜你喜欢
      • 2018-04-16
      • 1970-01-01
      • 2022-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多