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 :

[statnet/Network]Importer une matrice d'incidence valuée


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut [statnet/Network]Importer une matrice d'incidence valuée
    Bonjour,
    j'arrive à importer une matrice d'incidence "normale" avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Chargement fichier ASCII dans un tableau (MyTable)
    MyTable<-read.delim(file="c:/FichierTexte.txt",sep="\t", header=FALSE);
     
    # Chargement d'un objet réseau (net.mat) avec le tableau
    net.mat<-as.network(as.matrix(MyTable),vertex.attr=NULL, vertex.attrnames=NULL, directed=TRUE,hyper=FALSE, loops=FALSE, multiple=FALSE, bipartite = FALSE,matrix.type="edgelist")
    A partir d'un fichier de données brutes sans en-têtes, à autant de lignes que de sommets du graphe et à 2 colonnes, une qui contient la liste des sommets de départ, l'autre les sommets d'arrivée.

    j'utilise enfin la fonction gplot pour afficher le graphe.
    Tout fonctionne très bien.



    Je souhaiterais maintenant pouvoir mettre les arêtes d'une certaine couleur (avec l'option edge.col) en fonction d'une valeur que je chargerais dans le graphe.

    J'ai donc un fichier maintenant à 3 colonnes, les deux premières sont les mêmes que précédemment et la troisième indiquerait la couleur.

    J'essaie de convertir la matrice en réseau avec la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    net.mat<-as.network(as.matrix(MyTable),names.eval="V1 V2",vertex.attr=NULL, vertex.attrnames=NULL, directed=TRUE,hyper=FALSE, loops=FALSE, multiple=FALSE, bipartite = FALSE,matrix.type="edgelist")
    mais j'obtiens l'erreur :

    Erreur dans round(n) : Argument non numérique pour une fonction mathématique
    Je n'arrive pas à trouver comment indiquer que les premières colonnes sont les noms des sommets qui composent l'arête et la troisième colonne un attribut supplémentaire des arêtes.

    Quelqu'un sait-il comment on pourrait faire ?

    Merci.


  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Si tu lances
    après ton erreur, ça retourne quoi ?

  3. #3
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    Citation Envoyé par pitipoisson Voir le message
    Bonjour,

    Si tu lances
    après ton erreur, ça retourne quoi ?
    Ca produit ce message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    3: network.initialize(n, directed = directed, hyper = hyper, loops = loops, 
           multiple = multiple, bipartite = bipartite)
    2: as.network.matrix(as.matrix(MyTable), names.eval = "V1 V2", vertex.attr = NULL, 
           vertex.attrnames = NULL, directed = TRUE, hyper = FALSE, 
           loops = FALSE, multiple = FALSE, bipartite = FALSE, matrix.type = "edgelist")
    1: as.network(as.matrix(MyTable), names.eval = "V1 V2", vertex.attr = NULL, 
           vertex.attrnames = NULL, directed = TRUE, hyper = FALSE, 
           loops = FALSE, multiple = FALSE, bipartite = FALSE, matrix.type = "edgelist")

  4. #4
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    OK, maintenant il faudrait savoir ce que as.network.matrix passe comme argument n à la fonction network.initialize...
    Et donc afficher le code de la fonction en tapant dans la console R :
    (sans les parenthèses !)

    Si ça ne marche pas, essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getAnywhere("as.network.matrix")

  5. #5
    Membre chevronné Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Par défaut
    A priori la fonction network.initialize est appelée de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     network.initialize(n, directed = directed, hyper = hyper, 
            loops = loops, multiple = multiple, bipartite = bipartite)
    Voici le code renvoyé par la console :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    function (x, matrix.type = NULL, directed = TRUE, hyper = FALSE, 
        loops = FALSE, multiple = FALSE, bipartite = FALSE, ignore.eval = TRUE, 
        names.eval = NULL, na.rm = FALSE, edge.check = FALSE, ...) 
    {
        nattr <- attr(x, "n")
        battr <- attr(x, "bipartite")
        vattr <- attr(x, "vnames")
        if (is.logical(x)) {
            x <- 1 * x
        }
        if (is.null(matrix.type)) 
            matrix.type <- which.matrix.type(x)
        else matrix.type <- match.arg(matrix.type, c("adjacency", 
            "incidence", "edgelist", "bipartite"))
        if (is.logical(bipartite) && bipartite) 
            matrix.type <- "bipartite"
        if ((bipartite > 0) && (matrix.type == "adjacency") && (NROW(x) == 
            bipartite)) 
            matrix.type <- "bipartite"
        unames <- NULL
        if (matrix.type == "edgelist") {
            if (dim(x)[2] > 2) 
                vals <- x[, -(1:2)]
            else vals <- NULL
            if (is.character(x <- as.matrix(x[, 1:2, drop = FALSE]))) {
                unames <- sort(unique(as.vector(x)))
                x <- cbind(match(x[, 1], unames), match(x[, 2], unames))
            }
            if (!is.null(vals)) 
                x <- cbind(x, vals)
        }
        if (matrix.type == "adjacency" && !is.null(colnames(x))) {
            unames <- colnames(x)
        }
        if (matrix.type == "bipartite") {
            directed <- FALSE
            bipartite <- dim(x)[1]
            unames <- 1:sum(dim(x))
            if (!is.null(rownames(x))) {
                unames[1:(dim(x)[1])] <- rownames(x)
            }
            if (!is.null(colnames(x))) {
                unames[(dim(x)[1]) + (1:(dim(x)[2]))] <- colnames(x)
            }
        }
        if (!is.null(vattr)) 
            unames <- vattr
        n <- switch(matrix.type, adjacency = dim(x)[1], incidence = dim(x)[1], 
            bipartite = sum(dim(x)), edgelist = max(x[, 1:2]), )
        if (is.numeric(nattr)) 
            n <- nattr
        if (is.numeric(battr)) 
            bipartite <- battr
        g <- network.initialize(n, directed = directed, hyper = hyper, 
            loops = loops, multiple = multiple, bipartite = bipartite)
        g <- switch(matrix.type, adjacency = network.adjacency(x, 
            g, ignore.eval, names.eval, na.rm, edge.check), incidence = network.incidence(x, 
            g, ignore.eval, names.eval, na.rm, edge.check), bipartite = network.bipartite(x, 
            g, ignore.eval, names.eval, na.rm, edge.check), edgelist = network.edgelist(x, 
            g, ignore.eval, names.eval, na.rm, edge.check))
        if (!is.null(unames)) {
            g <- set.vertex.attribute(g, "vertex.names", unames)
        }
        g
    }
    <environment: namespace:network>

  6. #6
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Et que te renvoient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attr(as.matrix(MyTable), "n")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    attr(as.matrix(MyTable), "vnames")
    ?

    On avance

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/01/2015, 11h41
  2. [XL-2010] Importer une matrice creuse dans excel
    Par flo00154 dans le forum Excel
    Réponses: 2
    Dernier message: 23/12/2013, 19h21
  3. Importer une matrice Excel
    Par virus321 dans le forum Général Java
    Réponses: 1
    Dernier message: 24/11/2012, 21h57
  4. Réponses: 0
    Dernier message: 19/08/2011, 09h19
  5. Importation d'une matrice stockée dans un fichier texte
    Par Contractofoued dans le forum C++
    Réponses: 4
    Dernier message: 21/05/2008, 18h21

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