2016-05-31 2 views
2

J'ai créé un igraph avec 1000 arêtes. Mon but est d'extraire tous les triangles trouvés dans cette igraph mais d'inclure l'étiquette plutôt que juste le nombre. Je veux aussi qu'il soit sous forme de trame de données qui a 3 colonnes (un pour chaque nœud du triangle)Extrait tous les triangles en Igraph avec des étiquettes

J'ai essayé simplement d'appeler:

triangles(graph) 

et qui donne une liste de retour avec les noms tous dans une colonne:

+ 28431/204 vertices, named: 
    [1] node_a             
    [2] node_b     
    [3] node_c 
    [4] node_a             
    [5] node_b     
    [6] node_d     
    [7] node_a             
    [8] node_b     
    [9] node_e        
    [10] node_a             
+ ... omitted several vertices 

Lorsque je tente:

adjacent.triangles(graph) 

il retourne tous les numéros, mais n ot les noms des noeuds:

[1] 15 103 45 121 152 78 325 325 3 35 90 0 488 283 3 0 325 325 325 325 78 21 190 3 
[25] 133 0 47 167 167 6 3 325 505 415 0 36 78 325 78 78 90 6 206 6 36 0 78 49 

Je dois trouver une fonction par igraph qui peut me donner les triangles dans le format suivant:

COL1   COL2  COL3 
node_a  node_b  node_c 
node_a  node_b  node_d 
node_a  node_b  node_e 
node_f  node_g  node_h 

Toute aide serait génial, merci!

Répondre

6

Vous pouvez utiliser la fonction clique (en supposant g est votre graphique),

cl.tri=cliques(g,min=3,max=3) 

pour trouver les cliques de taille trois (triangles), puis les assembler en une trame de données par,

df<-lapply(cl.tri,function(x){V(g)$name[x]}) 

df2=data.frame(matrix(unlist(df),ncol=3,byrow=T)) 
+0

Je vous remercie. Est-ce que je ferais juste une correspondance d'index pour voir ce que les étiquettes sont? –

+1

Oui, vous pouvez faire quelque chose comme, lapply (cl.tri, fonction (x) {V (g) $ noms [x]}) avant de créer la trame de données ou, s'appliquent (df, 2, fonction (x) {V (g) $ noms [x]}) après. Il y a peut-être un moyen de faire en sorte que les cliques puissent renvoyer directement les étiquettes, mais je ne suis pas sûr. –

+0

C'était un bon début, merci. Quand j'ai essayé cela, une erreur est survenue quand j'ai lancé le fichier df = data.frame (matrice (unlist (cl.tri), ncol = 3, byrow = T)) J'ai essayé la première fonction –