Mie May 09, 2007 5:51 am
|
 |
Mang
Perlero Nuevo

|
Registrado: 09 May 2007
Mensajes: 4
|
|
| Asignar valores guardados en un hash a otros datos |
|
|
Hola compañeros perleros, me alegro de entrar en este foro y enviaros mi primer post. Soy novato en esto y acabo de empezar, pero espero que con el paso del tiempo y las ayudas de este foro pueda avanzar en la materia.
Os cuento, trabajo en bioinformática con análisis de secuencias biológicas y Perl y me ha surgido un problema. Pero antes de nada, para que veáis cómo son los datos que empleo os pongo este ejemplo:
| Código: |
| Q P V L H L V A L N T P L S G G M R G I R G A D F Q C |
donde cada letra de la secuencia correspondería, en este caso, a un aminoácido. En mi trabajo tengo que asignar a cada aminoácido de una secuencia un determinado valor numérico. Eso lo he hecho con un Hash (como cada aminoácido puede repetirse le he puesto un índice numérico según la posición de cada aminoácido) y hasta ahí, bien. El problema es que tengo que asignar esos valores a otra secuencia de aminoácidos diferente en un proceso de alineamiento en que se pueden perder aminoácidos en una y otra secuencia, con lo cual pierdo las "keys" del hash para asignar esos valores.
Por ejemplo, tengo las secuencias de partida A y B:
| Código: |
Secuencia A = VPIVNLKDEVLSQPGARI
Secuencia B = VPIVNLKDELLFSGSEGPLKPGARI |
Cada secuencia la meto en un array diferente (@A y @B), y los valores que asigno a la secuencia A en otro array (@VALOR), de igual longitud que @A. Con los posición de cada aminoácido de @A puedo asignar a cada aminoácido del array @A el valor de @VALOR que corresponde en un hash %H, de esta manera:
| Perl: | my $i=0;
do {
$H{$i}=$VALOR[$i];
$i++;
} until ($i==scalar@A); |
Vale, el código podría escribirse mejor, pero bueno, estoy aprendiendo
En fin, al alinear ambas secuencias A y B me queda esto (es un ejemplo):
| Código: |
Secuencia A resultante= IVNLKDQPGARI
Secuencia B resultante= IVNLKDKPGARI |
Como veis, en el proceso he perdido aminoácidos de la secuencia A y la B. Partiendo de los valores del Hash para los aminoácidos de la secuencia A que queden, ¿Cómo podría asignar los valores del hash %H que correspondan a la secuencia B?
Espero que hayáis entendido el problema, si no es así decidlo y os lo aclaro.
Muchas gracias por anticipado.
 |
|
|
|


Mie May 09, 2007 8:18 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
Bienvenido a los foros de Perl en Español.
No lo acabo de entender, tampoco.
Supongo que sabes que los hashes no guardan el orden en que reciben las claves. O dicho de otra manera, no se sabe en qué orden Perl guarda las claves/valor.
Si en una secuencia de aminoácidos, pongamos que guardas el valor del aminoácido 'V' en el hash %H, luego no sabrás si ese aminoácido corresponde al comienzo de la secuencia, al medio o al final. No se guardan posiciones en las claves de los hashes. Ahora bien, estás usando como claves las posiciones de los aminoácidos, por lo que casi lo estás usando como un array.
Entiendo la primera parte de la pregunta, lo de las secuencias @A y @B y que @VALOR guarda los valores de los aminoácidos en función de la posición dentro de la secuencia, pero no entiendo lo que pones después.
A ver... si se trata sólo de asignar los valores almacenados en %H a la secuencia @B, valdría con sacar el listado de las claves de %H. Pero el problema ahora es que se han perdido aminoácidos en @A.
Si en la secuencia final de @A, empieza con el aminoácido 'I', ¿ese 'I' a cuál de los anteriores corresponde?
Yo necesito un detalle un poco mayor.
Por otra parte... si las dos secuencias quedan alineadas al final, ¿no tendrían los aminoácidos de @B que tener el mismo valor que @A? ¿O eso es justo lo que estamos intentando averiguar, que no son iguales? |
|

Sab May 12, 2007 2:46 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
| Después de pensar un poco más en el problema, quizás la solución sea almacenar las posiciones relativas $i de cada aminoácido, para que, después del proceso de alineación, sabremos exactamente a qué aminoácido original corresponde la secuencia que queda, y de ahí, el valor a asignar al Hash. |
|
Lun May 14, 2007 11:47 am
|
 |
Mang
Perlero Nuevo

|
Registrado: 09 May 2007
Mensajes: 4
|
|
|
|
|
Hola otra vez compañeros
Gracias por las respuestas y perdón por la tardanza en escribir. He estado mirando el problema y la respuesta era más fácil de lo que os había contado, pero me había liado al plantearlo (cómo se nota que no soy informático;-) y con un array donde conservar los valores bastaba. En fin, gracias por las respuestas y nos vemos en la próxima duda
Saludos |
|
Lun May 14, 2007 12:17 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
|
|
|
|
|
| Pero... ¿nos puedes explicar un poco más cuál era el problema? ¿Me moriré sin saberlo? |
|
Powered by phpBB © 2001, 2005 phpBB Group
|