2010-07-22 12 views
22

Dire che ho questo grafico esempio, voglio trovare i bordi collegati al vertice 'a'Come trovo i bordi di un vertice usando igraph e R?

d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'), 
       p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e')) 

library(igraph) 
g <- graph.data.frame(d, directed=FALSE) 
print(g, e=TRUE, v=TRUE) 

posso facilmente trovare un vertice:

V(g)[V(g)$name == 'a' ] 

ma ho bisogno di fare riferimento a tutti i bordi collegato al vertice 'a'.

risposta

25

Vedere la documentazione su igraph iterators; in particolare le funzioni from() e to().

Nel tuo esempio, "a" è V (g) [0], in modo da trovare tutti i bordi collegati ad "a":

E(g) [ from(0) ] 

Risultato:

[0] b -- a 
[1] c -- a 
[2] d -- a 
+0

Nota per gli utenti Python-IGRAPH: Equivalente a questa soluzione è quella di utilizzare [selezionare] (http EdgeSeq: // IGRAPH .org/python/doc/igraph.EdgeSeq-class.html # select), ma attualmente è bacata come menzionato in questa [segnalazione di bug] (https://github.com/igraph/python-igraph/issues/30). La soluzione suggerita per ottenere gli ID del vertice X è usare 'g.es [g.incident (x)]'. – JeeYem

4

Se lo fai non si conosce l'indice del vertice, lo si può trovare usando match() prima di usare la funzione from().

idx <- match("a", V(g)$name) 
E(g) [ from(idx) ] 
3

Trovato una versione più semplice che combina i due sforzi sopra che può essere utile anche.

E(g)[from(V(g)["name"])] 
1

Io uso questa funzione per numero di spigoli ottenere per tutti i nodi:

sapply(V(g)$name, function(x) length(E(g)[from(V(g)[x])])) 
Problemi correlati