【发布时间】:2012-07-24 08:46:53
【问题描述】:
我有以下问题: 我想创建一个 perl 脚本,它从文本文件(包含几列数字的文件)中读取并计算一些统计数据(平均值、中位数、标准差、方差)。我已经构建了一个脚本,但是由于我还没有爱上 perl,所以我无法解决它的语法问题...... 这是我的 perl 脚本..
#!/usr/bin/perl -w
use strict;
open(FILEHANDLE, data.txt);
while (<FILEHANDLE>) {
shift @ARGV;
my @array = split(\t,$_);
}
close(FILEHANDLE);
###### mean, sum and size
$N = $sum = 0;
$array[$x-1];
$N++;
$sum += $array[$x-1];
###### minimum and the maximum
($min = 0, $max = 0);
$max = $array[$x-1] if ($max < $array[$x-1]), (my@sorted = sort { $a <=> $b } @samples) {
print join(" ",@sorted);
}
##### median
if ($N % 2==1) {
print "$median = $sorted[int($N/2)]\n"; ## check this out
};
else ($median = ($sorted[$N/2] + $sorted[($N/2)-1]) / 2)) {
print "$median\n"; # check this out
};
##### quantiles 1º and 3º
if $qt1 = $sorted[$r25-1] {
print "\n"; # check this out
};
else $qt1 = $fr*($sorted[$ir] - $sorted[$ir-1]) + $sorted[$ir-1] {
print "\n"; # check this out
};
##### variance
for (my $i=0;
$i<scalar(@samples);
$i++)
{
$Var += ($samples[$i]-$mean)**2;
$Var = $Var/($N-1);
};
###### standard error
($Std = sqrt($Var)/ sqrt($N));
############################################################
print "$min\n";
print "$max\n";
print "$mean\n";
print "$median\n";
print "$qt1\n";
print "$var\n";
print "$std\n";
exit(0);
我想让它工作。请帮忙。提前致谢!
【问题讨论】:
-
这是一团糟。我建议您制作函数,并在较小的范围内整理错误。例如。
sub sum { ... }您可能也有兴趣查看CPAN 的一些模块,例如List::Util 的最小值和最大值等。 -
谢谢,你是对的。我不允许使用 CPAN 模块。看剧本的时候头疼。正如我所说,我是 perl 的新手,这对我的大脑来说太多了。 xD。这个烂摊子应该可以工作,它只需要几个循环和计数器。
-
如果这是作业,你应该用作业标签标记它。这段代码中有很多错误,你无法让别人指出它们。我建议您检查错误并一一修复。不要关闭严格和警告。
-
抱歉,我看不懂这个脚本。如果你不爱perl,那么,你一定爱上了其他语言。或者,如果您需要帮助,您需要对他人更有礼貌,并对您的代码进行良好的格式化。
-
另外,请检查 CPAN 上的
Statistics::等模块。
标签: perl statistics