igraph edge between two vertices

6.3k views Asked by At

I'm new to R and igraph and I was wondering if anybody can help me with the following.

I want to find the edge weight between two vertices in a graph. My graph structure is defined by the normal ego (node1), alter (node2) and the weight of the edge between them.

I know that I can get the weight for each of the edges in the list of edges that originate from node number 5 using E(igraph_friendship) [ from(5) ]$weight And that I can find the weight for each of the edges in the list of edges that end onto node number 10 using E(igraph_friendship) [ to(10) ]$weight

But what if I simply want to find the weight of the edge that simple connects just node 5 and node 10?

Alternatively, if I can get the identifier of the edge that connects node 5 and 10 in the list of all edges, E(igraph_friendship), that would work too.

Thanks a lot for your help, I've been looking around a lot for it and I really appreciate your help!

2

There are 2 answers

1
newmathwhodis On BEST ANSWER

Gabor's use of the adjacency matrix helped. However, it took me a while to figure out how to get my edge lists with weights into an adjacency matrix. I tried to do it the usual way using graph.data.frame but then would get a weird error when I tried translating the igraph object to and adjacency matrix (error: Error in .M.kind(x) : not yet implemented for matrix w/ typeof character). This post helped do the trick: https://sites.google.com/site/daishizuka/toolkits/sna/weighted-edgelists.

However, what I found out from the R help email list help to work best was this simple operator directly on the igraph object: E(g)[5 %--% 10]$weight. See http://igraph.sourceforge.net/doc/R/iterators.html for details

2
Gabor Csardi On

This is actually quite easy in igraph 0.6 and above, because you can treat the graph as if it was an adjacency matrix (or weighed adjacency matrix in your case):

library(igraph)
g <- graph.ring(10)
g[1,2]
# [1] 1
E(g)$weight <- runif(ecount(g))
g[1,2]
# [1] 0.8115639

If you want to do this for the whole matrix, then you can simply do

g[]

Or, if you don't want sparse matrices, then

g[sparse=FALSE]

Please see ?"[.igraph" for more.