我试图让一个perl循环工作,从包含6个元素的数组.我希望循环从数组中拉出两个元素,执行某些函数,然后循环返回并从数组中拉出接下来的两个元素,直到数组耗尽元素.问题是循环只拉出前两个元素然后停止.这里的一些帮助会被大大提升.
my open(infile, 'dnadata.txt');
my @data = < infile>;
chomp @data;
#print @data; #Debug
my $aminoacids = 'ARNDCQEGHILKMFPSTWYV';
my $aalen = length($aminoacids);
my $i=0;
my $j=0;
my @matrix =();
for(my $i=0; $i<2; $i++){
for( my $j=0; $j<$aalen; $j++){
$matrix[$i][$j] = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
该计划的指导原则指出,该计划应忽略计划中存在的差距.这意味着应该忽略与间隙匹配的DNA代码.因此,推送的代码需要具有与删除的间隙相关联的对齐.
我需要将数组的长度修改为2,因为我在循环的这部分中比较了两个序列.
#$lemseqcomp = $lenarray / 2;
#print $lenseqcomp;
#I need to initialize these saclar values.
$junk1 = " ";
$junk2 = " ";
$seq1 = " ";
$seq2 = " ";
Run Code Online (Sandbox Code Playgroud)
这是导致问题的循环.我相信第一个循环应该移回到数组并在每次循环时拉出下一个元素,但事实并非如此.
for($i=0; $i<$lenarray; $i++){
#This code should remove the the last value of the array once and
#then a second time. The sequences should be the same length at this point.
my $last1 =pop(@data1);
my $last2 =pop(@data1);
for($i=0; $i<length($last1); $i++){
my $letter1 = substr($last1, $i, 1);
my $letter2 = substr($last2, $i, 1);
if(($letter1 eq '-')|| ($letter2 eq '-')){
#I need to put the sequences I am getting rid of somewhere. Here is a good place as any.
$junk1 = $letter1 . $junk1;
$junk2 = $letter1 . $junk2;
}
else{
$seq1 = $letter1 . $seq1;
$seq2 = $letter2 . $seq2;
}
}
}
print "$seq1\n";
print "$seq2\n";
print "@data1\n";
Run Code Online (Sandbox Code Playgroud)
我实际上是尝试从头开始创建一个替换矩阵并返回数据.代码看起来很奇怪的原因是因为它实际上还没有完成而我卡住了.如果有人好奇,这是测试序列.
YFRFR
YF-FR
FRFRFR
ARFRFR
YFYFR-F
YFRFRYF
Run Code Online (Sandbox Code Playgroud)
首先,如果您要使用序列数据,请使用BioPerl.生活将变得如此简单.然而...
既然您知道要将输入文件中的行作为成对进行比较,那么将它们读入反映该数据结构的数据结构是有意义的.正如其他人所建议的那样,数组@data[[line1, line2],[line3,line4])确保正确的线对始终在一起.
我不清楚你要做的是:
那么,第一对是代表您的数据,还是更像第二对?
ATCG---AAActctgGGGGG--taGC
ATCGcccAAActctgGGGGGTTtaGC
ATCG---AAActctgGGGGG--taGCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
ATCGcccAAActctgGGGGGTTtaGCGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |