IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bioinformatique Perl Discussion :

hash de hash et maximum


Sujet :

Bioinformatique Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut hash de hash et maximum
    Bonjour,

    Je voudrais obtenir l'élément ayant la taille la plus grande pour un gène donnée.
    Mais voilà je bloque pour le

    Voiçi mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tata	geneA	738
    toto	geneB	954
    tutu	geneC	663
    lili	geneC	768
    riri	geneC	783
    fifi	geneC	864
    lala	geneC	888
    papa	geneD	1766
    mama	geneD	2067
    nono	geneD	29
    Résultat attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tata	geneA	738
    toto	geneB	954
    lala	geneC	888
    mama	geneD	2067

    Voiçi mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    my $fichier = 'fichier';
    open my $fh, '<', $fichier or die "Impossible de lire le fichier $fichier\n";
    my $i=0;
     
    my %hash=();
    while(my $ligne = <$fh>){
    	$i++;
            chomp $ligne;
            my ($enst,$ensg,$taille) = split "\t", $ligne;
     	$hash{$ensg}{$taille}=$enst;#hash de hash
    }
    close($fh);
    foreach my $t (keys %hash){
    	foreach (keys %{$hash{$t}}){
     
    #my $max;
    #$max = {$_} if ({$_} > $max)
     
            }
    }

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    Citation Envoyé par pontarose Voir le message
    Bonjour,

    Je voudrais obtenir l'élément ayant la taille la plus grande pour un gène donnée.
    Mais voilà je bloque pour le
    [HS]
    Quel dommage, la réponse est probablement facile mais il manque le
    [/HS]


    tu ne fais que stocker chaque valeur, ajoute un test sur l'existence et la valeur ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut
    je bloque sur la façon de trouver le maximum de mes valeurs pour un gène donnée.

    Oui effectivement; il faudrait faire un test mais je n'arrive pas à écrire le fait de "regarder la valeur courante et voir si elle est plus petite ou plus grande que la précédente"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach my $t (keys %hash){
    	foreach (keys %{$hash{$t}}){
    		my $max =0;
    		$max = ($_) if ($_) > $max;
            }
    }

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je pense que ça devrait fonctionner comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    my $fichier = 'fichier.txt';
    open my $fh, '<', $fichier or die "Impossible de lire le fichier $fichier\n";
     
    my %hash=();
    while(my $ligne = <$fh>){
            chomp $ligne;
            my ($enst,$ensg,$taille) = split "\t", $ligne;
            if ( !exists $hash{$ensg} or ($hash{$ensg}{'taille'} < $taille) ){   # Attention a la gestion des tailles égales
                    $hash{$ensg}{'taille'}=$taille;
                    $hash{$ensg}{'espece'}=$enst;
            }
    }
    close($fh);
     
    foreach my $gene (keys %hash){
            print "gene:$gene, taille : $hash{$gene}{'taille'}, espece:$hash{$gene}{'espece'}\n";
    }
    si tu ne veux que la plus grande et que tu n'as pas besoin des autres données ensuite, stocke uniquement ce que tu as besoin.
    Les données en bioinformatiques sont souvent très volumineuses alors il faut essayer de ne pas parcourir à plusieurs reprises de longues listes, hash... car sinon tu risques d'avoir des temps de traitements très couteux en temps et en ressources info

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    ++.

    Aucune raison de stocker l'ensemble du fichier dans un hash alors qu'il suffit de le parcourir séquentiellement et de mettre à jour le max pour chaque gène trouvé.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut
    Merci à tous,

    et merci pour les conseil ,j'ai du mal à voir comment concevoir mes scripts et il est vrai que j'ai tendance à toujours stocker (dans ma tête je pense étape par étape)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parcours d'un hash de hash de hash
    Par ngere dans le forum Langage
    Réponses: 5
    Dernier message: 06/07/2005, 09h53
  2. Réponses: 6
    Dernier message: 05/07/2005, 11h05
  3. Réponses: 2
    Dernier message: 09/03/2005, 14h35
  4. [langage] hash de hash
    Par Kinethe dans le forum Langage
    Réponses: 17
    Dernier message: 27/08/2004, 13h22
  5. [langage] probleme avec un hash de hash
    Par planetevoyage dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2003, 12h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo