从aPerl脚本计算均值

时间:2011-11-22 23:56:55

标签: statistics

我还在这里。 ;) 我从一个非常专业的人那里得到了这个代码,我很害羞地问他这个基本问题......无论如何这是我现在的问题;这个Perl脚本打印一列数字分隔空格的中位数,并且,我添加了一些东西来获得它的大小,现在我正在尝试获得相同列的总和。我做了,但没有结果,我没有采取正确的专栏? ./stats.pl 1 columns.txt
    #!的/ usr / bin中/ perl的

use strict;
use warnings;

my $index = shift;
my $filename = shift;
my $columns = [];

open (my $fh, "<", $filename) or die "Unable to open $filename for reading\n";

for my $row (<$fh>) {

my @vals = split/\s+/, $row;
push @{$columns->[$_]}, $vals[$_] for 0 .. $#vals;
}

close $fh;

my @column = sort {$a <=> $b} @{$columns->[$index]};

my $offset = int($#column / 2);
my $length = 2 - @column % 2;

my @medians = splice(@column, $offset, $length);

my $median;
$median += $_ for @medians;
$median /= @medians;

print "MEDIAN = $median\n";
################################################
my @elements = @{$columns->[$index]};
my $size = @elements;
print "SIZE = $size\n";
exit 0;
#################################################
my $sum = @{$columns->[$index]};
for (my $size=0; $size < $sum; $size++)  { 
my $mean = $sum/$size;
};
print "$mean\n";

提前感谢。

1 个答案:

答案 0 :(得分:0)

确定一些指示让你前进:

您可以将所有数字放入数组中:

my @result = split(m/\d+/, $line);
#average 
use List::Util qw(sum);
my $sum = sum(@result);

然后,您可以使用$result[$index]访问各个列,其中index是您要访问的列数。

另请注意:

$total = $line + $total;
$count = $count + 1;

可以改写为:

$total += $line;
$count += 1;

最后确保您正在阅读文件:

将“调试”打印放入while循环:

print $line, "\n";

这应该让你去:)