【问题标题】:Selecting highest count of element except when...选择最高数量的元素,除非...
【发布时间】:2014-04-30 09:36:46
【问题描述】:

所以我一直在研究这个 perl 脚本,它将分析和计算不同行空间中的相同字母。我已经实现了对哈希的计数,但是在从该哈希的输出结果中排除“-”字符时遇到了麻烦。我尝试使用 delete 命令或 next if,但没有摆脱输出中的 - 计数。

所以有了这个输入:

@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 语言。

如果我的要求不清楚或需要更多信息,请告诉我,再次感谢所有 cmets。

【问题讨论】:

    标签: perl hash bioinformatics


    【解决方案1】:

    您的数据并不完全有意义,因为它实际上并不是在运行 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
    

    【讨论】:

    • 我非常接近,看起来 for @chars 是导致我出现一些问题的原因。感谢米勒的帮助!
    【解决方案2】:
    foreach my $extract(@extract) {
    #next if $_ =~ /\-/
    

    $_ 设置在此处被 $extract 抑制。 (在这种情况下,$_ 保留上面的值,例如例程参数列表、上一个匹配项等)

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

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

    【讨论】:

    • 谢谢,一直在优化代码!不知道如何准确地写它:D
    • 我听说过它,但目前没有使用它,尽管它在这种情况下可能会有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2019-03-19
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多