• Publicidad

Dividir en codones

Perl aplicado a la bioinformática

Re: Dividir en codones

Notapor Lumyjj » 2009-12-30 07:32 @355

Sí, supongo que ese es mi mayor problema. La verdad es que ha sido de no saber nada de programación a tener que hacer un programa después de un trimestre en el que sólo hemos tenido informática en una asignatura. Ha sido un poco agobiante todo y así me estoy viendo ahora desbordada por el trabajo >.<

He empezado con el código y me da un error que no sé a qué se debe:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my(@F);
my(@L);
# ... y todos los demás

my $posamin = 0;

for ($posamin = 0; $posamin < (scalar @secuenciaamin)-1; $posamin += 1) {

    if ($secuenciaamin[$posamin] eq 'F') {
        push (@F, $secuenciacodon[$posamin]);
    }

    elsif ($secuenciaamin[$posamin] eq 'L') {
        push (@L, $secuenciacodon[$posamin]);
    }

    elsif ($secuenciaamin[$posamin] eq 'I') {
        push (@I, $secuenciacodon[$posamin]);
    }

    # ... y así con todos

    else {
        print "Error! Esto no es un aminoácido";
    }

}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Y el error que me da es este:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Use of uninitialized value $G[0] in print at programa.pl line 210.
Use of uninitialized value $G[1] in print at programa.pl line 210.
Use of uninitialized value $G[2] in print at programa.pl line 210.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

.... etc etc.

Pero no lo entiendo, ¡porque yo ya inicialicé el array antes! o.O

Gracias.
Última edición por explorer el 2009-12-30 07:36 @358, editado 2 veces en total
Razón: Formateo, bloques de código
Lumyjj
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2009-12-27 07:05 @336

Publicidad

Re: Dividir en codones

Notapor explorer » 2009-12-30 07:38 @360

El error dice que en la línea 210 estás haciendo uso de los valores de $G[0], $G[1] y $G[2], que en ese momento no tienen ni han tenido nunca ningún valor (no han sido inicializados).

Repasa las líneas donde asignas valores a @G.

Sería recomendable que publicaras todo el código, y no solo algunas líneas. Usa el botón de Perl que hay justo encima de la caja de edición de texto para enmarcar los bloques de código Perl. Así, saldrán con colores y con números de línea, y será más fácil localizar los errores.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dividir en codones

Notapor Lumyjj » 2009-12-30 14:09 @631

Tengo otra duda más, necesito que si se cumplen un número de condiciones, todas ellas, suceda algo. He utilizado el if, pero lo debo utilizar mal porque simplemente cumpliéndose una de las condiciones hace lo que le digo, cuando yo lo que quiero es que se cumplan todas y cada una de las condiciones. ¿Cómo sería esto?
Yo lo he escrito así: if (condición 1, condición 2, condición3) { haz esto ; }
Lumyjj
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2009-12-27 07:05 @336

Re: Dividir en codones

Notapor explorer » 2009-12-30 17:15 @760

Ponlo como

if ( condición1 and condición2 and condición3 )
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dividir en codones

Notapor Lumyjj » 2010-01-09 14:54 @662

Hola de nuevo:
Tengo ciertas dudas sobre los hashes.

¿Cómo hago para añadir una clave sin darle todavía un valor (que se añadirá más tarde) en un hash?

Igual que en un array al elemento primero se le denomina $array[0], ¿cómo se llama al primer elemento de un hash? (y al segundo, tercero...)

Cada valor del hash se puede recoger con $hash{clave}, pero ¿cómo puedo hacer para recoger la clave de un determinado valor?
Lumyjj
Perlero nuevo
Perlero nuevo
 
Mensajes: 13
Registrado: 2009-12-27 07:05 @336

Re: Dividir en codones

Notapor explorer » 2010-01-09 18:48 @825

Lumyjj escribiste:¿Cómo hago para añadir una clave sin darle todavía un valor (que se añadirá más tarde) en un hash?

hummm, interesante... quizás sea así: $hash{clave} = undef;

Lumyjj escribiste:Igual que en un array al elemento primero se le denomina $array[0], ¿cómo se llama al primer elemento de un hash? (y al segundo, tercero...)

Un hash no tiene recuerdo de la posición. O dicho de otra manera: las claves/valores almacenadas en un hash no serán recuperadas en el mismo orden en que fueron guardadas. Tiene que ver con el algoritmo de hashing que utiliza.

Sí que hay una manera, que sería usando un módulo como el Tie::IxHash, por ejemplo.

Lumyjj escribiste:Cada valor del hash se puede recoger con $hash{clave}, pero ¿cómo puedo hacer para recoger la clave de un determinado valor?

Por definición de hash, no está garantizado que un valor no se repite con más de una clave.

Para los casos en que estés seguro de que todos los valores son distintos, te vale con recorrer el hash usando keys() o each(), y comprobando si su valor correspondiente es el que estás buscando. Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while(($clave, $valor) = each %hash) {
    if ($valor eq $valor_a_buscar) {
        print "Clave del valor: $clave\n";
        last; # terminamos
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dividir en codones

Notapor kidd » 2010-01-11 17:54 @787

Lumyjj escribiste:¿Cómo hago para añadir una clave sin darle todavía un valor (que se añadirá más tarde) en un hash?


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$hash{'clave'} = undef;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lumyjj escribiste:Igual que en un array al elemento primero se le denomina $array[0], ¿cómo se llama al primer elemento de un hash? (y al segundo, tercero...)


La principal cualidad de los hashes, es que los valores están asociados por medio de llaves, las cuales puedes nombrar como quieras.

Es muy importante recordar que los hashes NO son ordenados, es decir, Perl los guarda en memoria de forma aleatoria, no como los arrays en donde los elementos son ordenados conforme se van añadiendo.

Lumyjj escribiste:Cada valor del hash se puede recoger con $hash{clave}, pero ¿cómo puedo hacer para recoger la clave de un determinado valor?


Si los valores son únicos, entonces es simplemente cuestión de voltear tu hash:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %hash_por_valores = reverse %hash;
my $llave = $hash_por_valores{$valor};
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si no son únicos, entonces con un grep lo puedes lograr:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @llaves = grep { $hash{$_} eq $valor } keys %hash;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos
Última edición por kidd el 2010-01-11 17:55 @788, editado 1 vez en total
Razón: Joaquín me ganó a la respuesta, pero bueno, aquí está la mia :)
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Anterior

Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados