Accéder aux noms de "lignes/colonnes" d'une distance (class)

Aller en bas

Accéder aux noms de "lignes/colonnes" d'une distance (class) Empty Accéder aux noms de "lignes/colonnes" d'une distance (class)

Message par HDKalit le Mer 11 Sep 2013 - 8:38

Bonjour tout le monde,

Je cherche en ce moment le maximum d'une distance entre 2 individus parmi un grand nombre.
La fonction dist() répond parfaitement à ma demande de distance.

En faisant le max() sur cette dernière j'obtiens bien la valeur de la distance maximale ... mais je n'arrive pas à récupérer le "nom" de la ligne et de la colonne correspondante.

Exemple:

Code:

dist(madateFrame[mesIndividus,]))
          1          3          5
3 16.9294510                     
5 14.7907740  3.6169090         
6 15.6790018  2.9084955  0.9588752
J'aimerai récupérer l'individu "1" et l'individu "3" mais j'avoue que je n'y arrive pas.

Si quelqu'un a une idée, je suis preneur!

Cdlt,

Khalid

HDKalit

Nombre de messages : 85
Date d'inscription : 10/01/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Accéder aux noms de "lignes/colonnes" d'une distance (class) Empty Re: Accéder aux noms de "lignes/colonnes" d'une distance (class)

Message par droopy le Mer 11 Sep 2013 - 9:23

En fait tu ne peux pas directement avec des indices classiques comme pour une matrice. Les données ne sont pas stockée sous la forme visible dans la console.
Code:
mat <- matrix(rnorm(15),3)
rownames(mat) <- letters[1:3]

dis1 <- dist(mat)
dis1
        a        b
b 3.933523       
c 3.966702 3.154431

str(dis1)
Class 'dist'  atomic [1:3] 3.93 3.97 3.15
  ..- attr(*, "Size")= int 3
  ..- attr(*, "Labels")= chr [1:3] "a" "b" "c"
  ..- attr(*, "Diag")= logi FALSE
  ..- attr(*, "Upper")= logi FALSE
  ..- attr(*, "method")= chr "euclidean"
  ..- attr(*, "call")= language dist(x = mat)
Il te faut regarder du côté de la fonction print.dist pour voir comment tu pourrais faire facilement :
Code:
stats:::print.dist
function (x, diag = NULL, upper = NULL, digits = getOption("digits"),
    justify = "none", right = TRUE, ...)
{
    if (length(x)) {
        if (is.null(diag))
            diag <- if (is.null(a <- attr(x, "Diag")))
                FALSE
            else a
        if (is.null(upper))
            upper <- if (is.null(a <- attr(x, "Upper")))
                FALSE
            else a
        m <- as.matrix(x)
        cf <- format(m, digits = digits, justify = justify)
        if (!upper)
            cf[row(cf) < col(cf)] <- ""
        if (!diag)
            cf[row(cf) == col(cf)] <- ""
        print(if (diag || upper)
            cf
        else cf[-1, -attr(x, "Size"), drop = FALSE], quote = FALSE,
            right = right, ...)
    }
    else {
        cat(data.class(x), "(0)\n", sep = "")
    }
    invisible(x)
}
droopy
droopy

Nombre de messages : 1126
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Accéder aux noms de "lignes/colonnes" d'une distance (class) Empty Re: Accéder aux noms de "lignes/colonnes" d'une distance (class)

Message par HDKalit le Mer 11 Sep 2013 - 11:47

Merci droopy!

C'est "marrant" ces différences de "code" d'ailleurs. Parfois on est sur des classes S3, d'autres sur S4, etc. J'espère qu'on arrivera à une uniformité du langage dans l'avenir.

Merci encore pour l'info, du coup je suis repasser par un bout de code à moi en transformant en matrice la Classe 'dist'.

Cdlt,

Khalid

HDKalit

Nombre de messages : 85
Date d'inscription : 10/01/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Accéder aux noms de "lignes/colonnes" d'une distance (class) Empty Re: Accéder aux noms de "lignes/colonnes" d'une distance (class)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum