angerusso has asked for the wisdom of the Perl Monks concerning the following question:
Dear perlmonkers, Could you point out what's wrong with my code? I want to get for each gene, the maximum value of the associated frequency printed in the 3rd column, but it gives wrong result (e.g. MUC2), see output below
Frequency GENE 20 SEMA4G 80 CTBP2 80 CTBP2 80 CTBP2 100 SPRN 40 SVIL 80 TIMM23 80 MINPP1 80 BTAF1 20 MUC2 60 MUC2 80 MUC2 100 MUC2 60 OR10G9 60 C11orf91 80 OR4S1 40 OR4C3 40 OR4C3 20 OR4C3 40 OR4C45 60 OR4C45
$file1 = $ARGV[0]; %hashfreq = (); $freq = 0; $geneold = "NA"; open(INPUTR,"<$file1") || die "Can't open \$file1 for reading.\n"; while($line=<INPUTR>){ chomp $line; @toks = split(/\t/, $line); $gene = $toks[1]; if ($gene =~ /^$geneold$/){ if ($toks[0] >= $numold){ $freq = $toks[0]; print $toks[0]."\t".$numold."\t".$freq."\t".$gene."\n"; } else { $freq = $numold; } $hashfreq{$toks[0]} = $freq; } else { $hashfreq{$toks[1]} = $toks[0]; } $numold = $toks[0]; $geneold = $toks[1]; } close(INPUTR); open(OUTD1,">output.txt"); open(INPUTR,"<$file1") || die "Can't open \$file1 for reading.\n"; while($line=<INPUTR>){ chomp $line; @toks = split(/\t/, $line); $idgene = $toks[1]; if (exists $hashfreq{$idgene}){ print OUTD1 $line."\t".$hashfreq{$idgene}."\n"; print $line."\t".$hashfreq{$idgene}."\n"; } }
Frequency GENE MAX 20 SEMA4G 20 80 CTBP2 80 80 CTBP2 80 80 CTBP2 80 100 SPRN 100 40 SVIL 40 80 TIMM23 80 80 MINPP1 80 80 BTAF1 80 20 MUC2 20 60 MUC2 20 80 MUC2 20 100 MUC2 20 60 OR10G9 60 60 C11orf91 60 80 OR4S1 80 40 OR4C3 40 40 OR4C3 40 20 OR4C3 40 40 OR4C45 40 60 OR4C45 40
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Error in Code: Need help
by tangent (Parson) on Mar 28, 2012 at 23:13 UTC | |
by angerusso (Novice) on Mar 29, 2012 at 00:22 UTC | |
|
Re: Error in Code: Need help
by Util (Priest) on Mar 28, 2012 at 23:11 UTC | |
by angerusso (Novice) on Mar 29, 2012 at 00:26 UTC | |
|
Re: Error in Code: Need help
by Util (Priest) on Mar 28, 2012 at 23:27 UTC | |
by angerusso (Novice) on Mar 29, 2012 at 00:24 UTC |