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

R Discussion :

stockage de chaînes de caractères de longueurs variables


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut stockage de chaînes de caractères de longueurs variables
    Bonjour,

    J'ai un problème de stockage de chaînes de caratères... Je vous explique mon problème sur un exemple simplifié. J'ai deux chaînes de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test
    [1] "TAC"                   "ATATGGTTACCAGGTAGATGC"
    Je voudrais obtenir le résultat suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "ATG"    "TATACCAATGG............"
    Pour cela, je commence par créer un data.frame pour stocker chaque chaîne de caractères.

    Pour chaque lettre de chaque chaine, je fais la transformation de lettres. J'essaie de stocker chaque "transformation de chaînes de caratères dans mon data.frame et c'est là mon problème ... J'ai vérifié, la transformation fonctionne mais je ne conserve que la dernière lettre de chaque chaîne.

    En termes de code, j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    aa_mut_new=data.frame(nrow=length(test),ncol=1)
    for (i in 1:length(test) )
    {
    	for (j in 1:nchar(test[i]))
    	{
    	aa_mut_new[i]=paste(switch(substr(expr_mut[i],j,j),
    		"A"="T",
    		"C"="G",
    		"G"="C",
    		"T"="A"))
    	}
    	print(aa_mut_new)
    }
    Et j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nrow ncol
    1    G    1
      nrow ncol
    1    G <NA>
    Je sais bien que c'est possible car j'ai déjà manipulé des data.frame contenant des chaînes de caractères de longueurs variables mais là, je n'y arrive pas !
    Pourriez-vous m'expliquer comment stocker des chaînes de caractères de longueur variable svp ?

  2. #2
    Membre averti
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Bonjour,
    le premier problème que je vois est lors de la création de ton data.frame tu créé un data.frame dont les variables se nomment nrow et ncol avec une seule ligne dont les valeur sont lenght(test) et 1.

    A mon avis, tu voulais plutôt créer une matrice du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aa_mut_new=matrix(nrow=length(test),ncol=1)
    ou si tu veux vraiment un data.frame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aa_mut_new=as.data.frame(matrix(nrow=length(test),ncol=1))

    Je n'ai pas encore regardé le code transformant les caractères...

    Bonne journée.

  3. #3
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Par défaut
    Bonjour,

    Tout d'abord, la remarque de benoit.abm concernant la création de votre data.frame est une bonne remarque.

    Ensuite, votre code contient pas mal de petites "coquilles" qu'il vous serait possible de corriger si vous testiez étape par étape les éléments présents dans votre boucle.

    Un de principaux problèmes de votre code est la mauvaise utilisation de "parse" dans la boucle sur les lettres présentes dans le "mot" concerné.
    En effet, à chaque étape j, vous écrasez le précédent contenu de "aa_mut_new[i]", d'où le fait qu'il ne reste qu'une seule lettre à la fin.

    Petite remarque au passage (qui ne change peut-être rien mais vive la rigueur ), dans votre boucle vous mettez "aa_mut_new[i]", or lors de la création de ce data.frame, vous indiquez bien qu'il est en 2 dimensions, avec une colonne. Il serait donc préférable de mettre "aa_mut_new[i,]".

    Enfin, que représente "expr_mut[i]" dans votre code? Est-ce "test[i]"?

    Normalement je pense qu'avec ces pistes vous devriez arriver à vos fins.
    Bonne continuation


    Cordialement,

    A.D.


    PS: Je crois qu'il existe un (des?) package R dédié aux données de type "adn" comme cela semble être le cas pour vous.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  4. #4
    Membre averti
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2011
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Santé

    Informations forums :
    Inscription : Août 2011
    Messages : 16
    Par défaut
    Bon en regardant un peu le code, je pense que la solution ci-dessous devrait répondre à la question. Après savoir si cela est optimisé, je ne pense pas...

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    test<-c("TAC","ATATGGTTACCAGGTAGATGC")
    test
    [1] "TAC"                   "ATATGGTTACCAGGTAGATGC"
     
    aa_mut_new<-vector()
    aa_mut_new
    logical(0)
     
     
    for (i in 1:length(test) )
     {
       for (j in 1:nchar(test[i]))
       {
       aa_mut_new[i]=paste(ifelse(is.na(aa_mut_new[i]),"",aa_mut_new[i]),
                           switch(substr(test[i],j,j),
                                 "A"="T",
                                 "C"="G",
                                 "G"="C",
                                 "T"="A"),sep="")
       }
     }
     
    test
    [1] "TAC"                   "ATATGGTTACCAGGTAGATGC"
    aa_mut_new
    [1] "ATG"                   "TATACCAATGGTCCATCTACG"
    as.data.frame(aa_mut_new)
                 aa_mut_new
    1                   ATG
    2 TATACCAATGGTCCATCTACG
    Benoît

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 219
    Par défaut
    Merci pour vos réponses

    C'était bien l'étape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    paste(ifelse(is.na(aa_mut_new[i]),"",aa_mut_new[i]),
                           switch(substr(test[i],j,j),
                                 "A"="T",
                                 "C"="G",
                                 "G"="C",
                                 "T"="A"),sep="")
    qui me posait problème. J'utilisais mal "paste", et surtout, je n'avais pas pensé à utiliser
    ifelse(is.na(aa_mut_new[i]),"",aa_mut_new[i])
    et je vois toujours pas ce qui s'y passe précisément.

    En tout cas, j'ai pu faire ce que je voulais, merci !

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

Discussions similaires

  1. [Split] Chaîne de caractères avec espace variable
    Par smarlytomtom dans le forum Général Java
    Réponses: 2
    Dernier message: 24/06/2015, 14h06
  2. Traitement chaîne de caractères en macro variable
    Par discus23 dans le forum Macro
    Réponses: 4
    Dernier message: 12/12/2014, 10h02
  3. Sélection d'une chaîne de caractère dans une variable
    Par ca_adrien dans le forum SAS Base
    Réponses: 2
    Dernier message: 05/06/2013, 14h46
  4. Réponses: 13
    Dernier message: 26/09/2008, 17h43
  5. Réponses: 1
    Dernier message: 30/04/2007, 15h33

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