选择最高元素数除外......

时间:2014-03-23 00:30:56

标签: perl hash bioinformatics

所以我一直在研究这个perl脚本,它将分析和计算不同行空间中的相同字母。我已经将计数实现为哈希,但我在排除" - "来自此哈希的输出结果的字符。我尝试使用删除命令或下一个if,但我没有摆脱输出中的 - count。

所以这个输入:

@extract = ------------------------------------------------------------------MGG-------------------------------------------------------------------------------------

以下代码:

#Count selected amino acids.
my %counter = ();
foreach my $extract(@extract) {
#next if $_ =~ /\-/; #This line code does not function correctly.  
$counter{$_}++;

}


sub largest_value_mem (\%) {
my $counter   = shift;
my ($key, @keys) = keys   %$counter;
my ($big, @vals) = values %$counter;

for (0 .. $#keys) {
    if ($vals[$_] > $big) {
        $big = $vals[$_];
        $key = $keys[$_];
    }
}
$key

}

我希望最常见的元素是G,与输出相同。如果元素中存在平局,比如G = M,如果有一种方法可以显示两者,那将是很好但不是必需的。有关如何删除或删除' - '的任何提示非常感谢。我正在慢慢学习perl语言。

如果我要问的不清楚或者是否需要更多信息,请告诉我,再次感谢所有评论。

2 个答案:

答案 0 :(得分:2)

foreach my $extract(@extract) {
#next if $_ =~ /\-/
此处 $ extract 会禁止 $ _ 设置。 (在这种情况下,$ _保持上面的值,例如例程参数列表,上一个匹配等)

此外,您可以使用字符类来提高可读性:

next if $extract=~/[-]/;

答案 1 :(得分:2)

您的数据并不完全有意义,因为它实际上并不是perl代码。我猜它是一个分成字符的字符串。之后,听起来你只是希望能够找到最高频率的字符,这实际上只是sort降序计数。

因此,下面演示了如何计算字符数,然后对结果进行排序:

use strict;
use warnings;

my $str = '------------------------------------------------------------------MGG-------------------------------------------------------------------------------------';

my @chars = split '', $str;

#Count Characteres
my %count;
$count{$_}++ for @chars;
delete $count{'-'}; # Don't count -

# Sort keys by count descending
my @keys = sort {$count{$b} <=> $count{$a}} keys %count;

for my $key (@keys) {
    print "$key $count{$key}\n";
}

输出:

G 2
M 1