Re: Problème avec l'utilisation de taxo2phylog

From: Sandrine Pavoine (pavoine@biomserv.univ-lyon1.fr)
Date: Tue Oct 25 2005 - 09:14:36 MEST

  • Next message: aedin culhane: "Re: DATA SAVE"

    Rebonjour,

    Je suis allée trop vite, le niveau qui pose problème est le niveau
    famille et non le niveau "Encore.haut". Je n'ai pas trouvé pourquoi. En
    attendant que l'on règle le problème et pour que tu puisses continuer,
    je t'envoie une fonction "ad hoc" pour calculer des distances entre taxa
    à partir d'une taxonomie.

    Les instructions sont

    source("dist.tax.R")
    cronquist <- read.table("cronquist.txt", h = T, row.names = 6)
    cronq.dis <- dist.tax(cronquist) # nécessite une ou deux minutes de
    fonctionnement

    La matrice de distances taxonomiques à rentrer dans la fonction 'dpcoa' est
    cronq.dis2 <- sqrt(2 * cronq.dis)

    Pour obtenir la taxonomie, les instructions suivantes peuvent être
    utilisées mais les noms des noeuds (familles, ordres, ...) ne sont pas
    disponibles.
    cronq.h <- hclust(cronq.dis)
    cronq.phy <- hclust2phylog(cronq.h)

    Merci d'avoir signalé ce problème,
    en attendant plus d'informations,
    bonne journée

    Sandrine Pavoine

    Sandrine Pavoine a écrit :

    > Bonjour Christophe,
    >
    > Le niveau taxonomique "Encore.haut" ne contient qu'un seul groupe :
    > "Magnoliophyta". Ce groupe sera à la "racine" de l'arbre taxonomique.
    > Tu dois enlever ce niveau avant de faire l'analyse
    >
    > cronquist <- read.table("cronquist.txt", h = T, row.names = 6)
    > cronquist <- as.taxo(cronquist[4:1]) # 4:1 et non 5:1
    > cro.phy <- taxo2phylog(cronquist)
    > plot(cro.phy)
    >
    > Bien cordialement
    >
    > Sandrine Pavoine
    >
    > -------------------------------------------------------------------------------------------------------
    > UMR 5173 MNHN-CNRS-P6 '/Conservation des espèces, restauration et
    > suivi des populations'
    > /Muséum National d'Histoire Naturelle, CRBPO, 55, Rue Buffon, 75005
    > Paris, France
    > -------------------------------------------------------------------------------------------------------
    >
    > Christophe Girod a écrit :
    >
    >> Bonjour à tous
    >>
    >> J'ai un problème dans l'utilisation de la fonction taxo2phylog avec
    >> un fichier de données. J'utilise un fichier représentant la
    >> classification sous cronquist de 200 genres d'arbres de la forêt
    >> guyanaise. Je veux intégrer ce fichier sous forme d'une phylogénie
    >> avant de l'utiliser dans des analyses de DPCOA. L'intégration sous
    >> forme de data frame se passe sans problème, tout comme le passage en
    >> objet de classe taxo. Au moment d'utiliser la fonctio taxo2phylog
    >> j'obtiens le message d'erreur suivant :
    >>
    >> Erreur dans newick2phylog.addtools(res) : la longueur de 'dimnames'
    >> [2] n'est pas égale à l'étendue du tableau
    >>
    >> Pourtant quand je regarde ce qu'il y a dans dimnames [2] : j'ai bien
    >> le nom de toutes mes colonnes (incluant celle qui donne les en-tête
    >> de ligne).
    >>
    >>> dimnames(cronquist) [2]
    >>
    >> [[1]]
    >> [1] "Famille" "Ordre" "Sousclasse" "Classe"
    >> "Encore.haut"
    >>
    >> Quand je lui demande la longueur de ça j'obtiens 1 comme réponse.
    >> Est-ce normal??
    >>
    >> J'ai utilisé la séquence de fonctions suivante
    >> cronquist <- read.table("cronquist.txt", h = T, row.names = 6)
    >> cronquist <- as.taxo(cronquist[5:1])
    >> cro.phy <- taxo2phylog(cronquist)
    >>
    >> J'avais déjà utilisé cette séquence sur des tableaux un peu plus
    >> petits (mais générés pareils, à partir d'un tableur excel) sans avoir
    >> aucun problème.
    >>
    >> Est-ce que quelqu'un peut m'aider?
    >>
    >> Merci beaucoup
    >>
    >> Cordialement
    >>
    >> Christophe Girod
    >>
    >> _________________________________________________________________
    >> Recherchez sur votre PC comme sur le Web avec Windows Desktop Search
    >> ! http://desktop.msn.fr/
    >>
    >>
    >>
    >>
    >

    dist.tax<-function(taxo){

            distance<-matrix(0,nrow(taxo),nrow(taxo))

            for(i in 1:(nrow(taxo)-1)){

                    for(j in (i+1):nrow(taxo)) {

                            if (taxo[i,ncol(taxo)]==taxo[j,ncol(taxo)]) {
                                    distance[i,j]<-1
                                    distance[j,i]<-1
                            }

                            else {

                                    compt<-0
                                    k<-ncol(taxo)
                                    l <- 1

                                    while(compt==0){
                    
                                            k <- k-1
                                            l <- l+1
                                            if (taxo[i,k]==taxo[j,k]) {
                                                    distance[i,j]<-l
                                                    distance[j,i]<-l
                                                    compt <- 1
                                            }
                                    

                                    }

                            }
                    }

            }
            rownames(distance) <- colnames(distance) <- rownames(taxo)
            return(as.dist(distance))

    }



    This archive was generated by hypermail 2b30 : Tue Oct 25 2005 - 09:18:17 MEST