Hi, i am trying to calculate the mode (most common) of an array of numbers. I also want to calculate the 2nd most common number etc until there are no number left. The code that i have written has no errors but also doesn't do anything!!! can anyone help?
#! /usr/local/bin/perl -w
use strict;
my $num_of_params;
$num_of_params = @ARGV;
if ($num_of_params < 2)
{
die ("\n You haven't entered enough parameters \n");
}
open (BLASTX, $ARGV[0]) or die "unable to open file";
open (OUTFILE, ">$ARGV[1]");
my $line;
my @array;
my $number;
my $count=0;
my @frequency;
my %count;
my @ordered;
while (<FILE>)
{
$line = $_;
chomp ($line);
@array = ();
@array = split (/\s+/, $line);
@frequency = $array[0];
sub odd_median
{
@frequency = shift;
@array = sort @frequency;
return $array[(@array - (0,0,1,0) [@array & 3]) /2];
}
sub mode
{
@frequency = shift;
my (%count, @result);
foreach (@frequency)
{
$count{$_}++;
}
foreach (sort { $count{$b} <=> $count{$a} } keys %count)
{
last if @result && $count{$_} != $count{$result[0]};
push (@result, $_);
}
return odd_median \@result;
}
}
close OUTFILE;
I am not sure whether i need to print values as well as return them? (not really sure exactly what return does) also how do i return to an OUTFILE with return.
If anyone has any better solutions to this problem they will be much appreciated.