Desde ya un millón de gracias por su ayuda. Les cuento: mi intención es simplemente obtener valores de frecuencia de aparición de un número que se encuentren en varios archivos y luego graficarlos. Por ejemplo, cuando TE = 1 se suma a la frecuencia de TE1, estoy trabajando con 8 TEs, de manera que al final quiero tener un gráfico de barras frecuencia versus TE1, TE2, TE3... etc. El problema es que estoy obteniendo errores de 2 tipos:
- Código: Seleccionar todo
Use of uninitialized value in numeric eq (==) at histo.pl line 21.
Argument "$f1" isn't numeric in numeric lt (<) at /Library/Perl/5.8.8/GD/Graph/Data.pm line 232.
He verificado que los valores de frecuencia estén bien y el módulo para graficar ya está bien instalado y he estado todo el día tratando de entender qué hay de malo en mi código. Por favor, cualquier ayuda es bienvenida.
Acá envío el código:
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use warnings;
- use strict;
- use CGI ':standard';
- use GD::Graph::bars;
- #to get the histogram frequency vs lnK or TE
- #Sintaxis:
- open(FILE,"$ARGV[0]") || die "File not found\n";
- #$_=<FILE>;
- my @lines = <FILE>;
- close(FILE);
- my ($total_residues_analyzed) = ((`wc $ARGV[0]`)=~ /^\s*(\d+)\s*.*$/);
- print "total_residues_analyzed + title line= $total_residues_analyzed\n";
- my $i=0;
- my $i1 = 0; my $i2 = 0; my $i3 = 0; my $i4 = 0; my $i5 = 0; my $i6 = 0; my $i7 = 0; my $i8 = 0; my $total = 0;
- foreach my $line (@lines){
- my ($TE) = $line =~ /^.*?( \d )$/;
- if ( $TE == 1 ) {
- $i1++;
- #print "TE=1 ;$i1 veces\n";
- }
- if ($TE== 2){
- ++$i2;
- }
- if ( $TE == 3) {
- $i3++;
- }
- if ($TE == 4){
- $i4++;
- }
- if ($TE == 5){
- $i5++;
- }
- if ($TE == 6){
- $i6++;
- }
- if ($TE == 7){
- $i7++;
- }
- if ($TE == 8){
- $i8++;
- }
- }
- print "TE=1 ; $i1 veces\n";print "TE=2 ; $i2 veces\n";print "TE=3 ; $i3 veces\n";print "TE=4 ; $i4 veces\n";
- print "TE=5 ; $i5 veces\n";print "TE=6 ; $i6 veces\n";print "TE=7 ; $i7 veces\n";print "TE=8 ; $i8 veces\n";
- $total=($i1+$i2+$i3+$i4+$i5+$i6+$i7+$i8);
- print "total=$total\n";
- my ($f1)=$i1; my ($f2)=$i2;my ($f3)=$i3;my ($f4)=$i4;my ($f5)=$i5;my ($f6)=$i6; my ($f7)=$i7;my ($f8)=$i8;
- my @freq = ('$f1','$f2','$f3','$f4','$f5','$f6','$f7','$f8');
- my @TE = ('1','2','3','4','5','6','7','8');
- my @graf = (\@TE, \@freq);
- my $grafico = GD::Graph::bars->new(500, 300);
- $grafico->set(
- x_label => 'TE',
- y_label => 'Frecuencia',
- title => 'title',
- ) or warn $grafico->error;
- my $imagen = $grafico->plot(\@graf) or die $grafico->error;
- open (OUT, "> /Users/Andrea/histo_file.png") or die "couldn't open /Users/Andrea/histo_file.png: $!";
- #print "Content-type: image/png\n\n";
- print OUT $imagen->png;
- exit;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Envío también un fragmento del tipo de archivo de entrada que estoy usando, donde la última columna corresponde a los TE:
- Código: Seleccionar todo
Residue dGprom dHap dHpol TdSconf TE
MET 1 6934.885 -1551.679 99.356 -6600.487 1
ARG 2 6934.885 -1551.679 99.356 -6600.487 1
GLU 3 6934.885 -1551.679 99.356 -6600.487 1
ILE 4 6934.885 -1551.679 99.356 -6600.487 1
SER 5 7712.407 -1305.880 -1022.363 -8226.602 1
GLN 6 9056.182 -1160.846 -1851.605 -10431.943 6
LYS 7 9764.170 -1521.382 -1295.115 -10674.952 6
ASP 8 9753.353 -1666.023 -743.023 -10185.608 6
LEU 9 9513.667 -1590.968 -688.094 -10032.352 6
ASN 10 9941.455 -1610.331 -93.911 -10077.921 8
LEU 11 9902.613 -1527.827 -11.849 -10022.129 8
ALA 12 9989.197 -1449.986 41.770 -10023.733 8
PHE 13 10154.779 -1312.573 143.667 -10025.243 8
GLY 14 10832.670 -1497.866 242.593 -10575.876 8