【发布时间】:2017-04-24 04:10:35
【问题描述】:
我试图从一组序列中获取一定百分比的编辑距离。到目前为止,这就是我所拥有的:
#!/usr/bin/perl -w
use strict;
use Text::Levenshtein qw(distance);
my @sequence = qw(CA--------W----------------------EKDRRTEAF---F------
CA--------W----------------------EKDRRTEAF---F------
CA--------S-------------------SLVFGQGDNIQY---F------
RA--------S-------------------SLIYSP----LH---F------);
foreach my $list (@sequence){
my @distance = distance($list, @sequence);
my @length = $list =~ tr/[A-Z]///;
}
我可以根据@length 的字母获得@distance 的编辑距离和每个序列的长度。如果打印出来结果如下:
@distance
0 0 13 14
0 0 13 14
13 13 0 11
14 14 11 0
@length
13
13
16
12
由于@length 的每一行相当于@sequence 的每一行,所以在比较两行时,我想使用最大的@length 来获得百分比。因此,当第二个和第三个序列之间有一个编辑距离时,它将使用 16 而不是 13 的长度来获得百分比。我认为需要做的是只调用 @length 数组的两个元素,然后选择较大的一个然后放入一个百分比中,可能使用 if 语句。
我知道这段代码是错误的,但这通常是我想要的想法:
foreach my $list (@sequence){
my @distance = distance($list, @sequence);
my @length = $list =~ tr/[A-Z]//; # / syntax hilite fix
foreach my $item(@distance){
foreach @length {
my $num1 = if $length[0] >= $length[1];
print "$item/$num1\n";
else my $num2 = $length[1] >= $length[0];
print "$item/$num2\n";
}
}
}
答案应该类似于以下内容:
0 0 .8125 1.0769 0 0 .8125 1.0769 .8125 .8125 0 .6875 1.0769 1.0769 .6875 0【问题讨论】:
标签: arrays perl loops bioinformatics edit-distance