• Publicidad

Randomizar datos por columnas

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Randomizar datos por columnas

Notapor Cristina » 2009-02-26 15:06 @671

Hola, hice un código que no entiendo porqué no funciona. Quiero randomizar datos por columnas. Los datos vienen de leer un file por filas. Creo un arreglo bi-dimensional y quiero randomizarlo. Tampoco sé cómo imprimirlo decentemente.
Mil gracias otra vez.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open(fp, "$filein");

srand (time | $$);

while($current_line = <fp>)

{
chomp($current_line);

        @seqs = split (//, $current_line);

        push ( @struct, @seqs);
}
for ($j=0; $j< @struct; $j++){

        for ($i=0; $i< @{$struct[$j]}; $i++)
                {
                $alea = int(rand($#struct));
                $temp = $struct[$i][$alea];
                $struct[$i][$alea] = $struct[$i][$j];
                $struct [$i][$j] = $temp;      
                       
                }
        }

close(fp);
exit;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
Cristina
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-02-05 10:17 @470

Publicidad

Notapor kidd » 2009-02-26 15:14 @676

Usando la función shuffle del módulo List::Util podrías lograr lo que quieres.

Por lo que entiendo quieres randomizar todos los elementos, tanto los del array global, como cada uno de los arrays que vas leyendo del archivo. Mi posible solución sería:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use List::Util qw(shuffle);
use Data::Dumper;

my $filein = 'archivo_de_entrada.txt';
my @struct;

open my $FILE, '<', "$filein" or die $!;

while($current_line = <$FILE>){
    chomp($current_line);

    my @seqs = split //, $current_line;

    #Agregamos el @seqs ya con un orden aleatorio
    push ( @struct, shuffle(@seqs) );

}

close $FILE;

#Finalmente cambiamos el orden de nuestro array final
@struct = shuffle(@struct);


#Mostramos el resultado con Data::Dumper
print Dumper(\@struct);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Finalmente con el módulo Data::Dumper podemos ver la estructura final del array.

Saludos
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

Notapor explorer » 2009-02-26 18:25 @809

¿Y por qué a Cristina le interesan tanto los números aleatorios?

Ya son dos los hilos en que los menciona...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Cristina » 2009-02-27 11:03 @502

Soy investigadora, bióloga, trabajo con secuencias de proteínas y mi intención es crear software predictivo de las propiedades de las proteínas a través de su secuencia. Luego para probar que lo que dices es verdad, hay que hacer un control negativo que es ver qué pasa con secuencias de la misma composición (mismos caracteres) pero ordenados aleatoriamente.

Hasta ahora trabajé con un programador (en C) y ahora tengo que hacerme las cosas sola, así que arremetí con Perl.

Me pasa que con los módulos que traen más funciones hechas no los puedo instalar, no sé si tendré problemas en mi sistema.

Les agradezco un montón a los dos, seguiré en el intento.
Cris.
Cristina
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-02-05 10:17 @470

Notapor explorer » 2009-02-27 13:18 @595

Perl tiene un proyecto aparte, llamado BioPerl, que sirve para todo lo relacionado con biología; pero, cuidado: tiene una curva de aprendizaje muy fuerte.

De hecho, solo se enseña en los cursos y masters de Bioinformática, porque es necesario un profesional que tenga conocimientos tanto de biología como de informática.

Mientras tanto, y sin llegar a esos niveles, Perl sirve perfectamente para las cosas que estás probando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Cristina » 2009-02-27 13:35 @607

Gracias Kidd por la respuesta.

Ya instalé las librerías que me decías.

Te agradezco un montón, pero no es lo que quiero hacer, quiero aleatorizar cada columna por separado. Cambiando el orden de impresión del array global no es aleatorio porque cada carácter siempre tiene los mismos vecinos (no quiero aleatorizar primero cada línea leída). En un futuro aleatorizaré algunas columnas y otras no.

Gracias otra vez,
Cristina
Cristina
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-02-05 10:17 @470

Notapor Cristina » 2009-02-27 13:38 @610

Gracias explorer, soy bioinformática de hecho, pero siempre a nivel usuario, no me había puesto a programar.

Con BioPerl no tengo buena experiencia aun, no llego a comprender la mayoría de las cosas, pero te hablo muy desde el inicio, no entiendo cómo usarlas.

Besos.
Cris.
Cristina
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-02-05 10:17 @470

Notapor kidd » 2009-02-27 13:39 @610

Si pudiéramos ver un ejemplo del archivo de entrada y cómo quisieras que se vea una vez randomizadas sus columnas te podríamos dar un poco más de guía.
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

Notapor Cristina » 2009-02-27 13:52 @619

Ej: archivo de entrada

Código: Seleccionar todo
12345
12345
ABCDE
ABCDE


Archivo de salida:
Código: Seleccionar todo
12CD5
A234E
ABC45
1B3DE


Lo hice con números y letras para hacerlo más visible,
Besos,
Cris
Cristina
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2009-02-05 10:17 @470

Notapor explorer » 2009-02-27 13:54 @621

Cristina escribiste:Gracias explorer, soy bioinformática de hecho, pero siempre a nivel usuario, no me había puesto a programar.

¿QUÉ? ¿CÓMO? ¿Es eso posible? :shock: ¿Dónde has estudiado? :o

¡AAaahhh! A nivel de usuario :)

Eso quiere decir que te enseñaron solo a manejar programas de manejo de secuencias de proteínas, ¿no? :twisted:

Por estos foros encontrarás algunos hilos sobre el tema de secuencias de bases genéticas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron