Use this if you are using igraph from R
Calculate the average nearest neighbor degree of the given vertices and the same quantity in the function of vertex degree
knn( graph, vids = V(graph), mode = c("all", "out", "in", "total"), neighbor.degree.mode = c("all", "out", "in", "total"), weights = NULL )
graph 
The input graph. It may be directed. 
vids 
The vertices for which the calculation is performed. Normally it
includes all vertices. Note, that if not all vertices are given here, then
both ‘ 
mode 
Character constant to indicate the type of neighbors to consider
in directed graphs. 
neighbor.degree.mode 
The type of degree to average in directed graphs.

weights 
Weight vector. If the graph has a 
Note that for zero degree vertices the answer in ‘knn
’ is
NaN
(zero divided by zero), the same is true for ‘knnk
’
if a given degree never appears in the network.
The weighted version computes a weighted average of the neighbor degrees as
k_nn_u = 1/s_u sum_v w_uv k_v
,
where s_u = sum_v w_uv
is the sum of the incident edge weights
of vertex u
, i.e. its strength.
The sum runs over the neighbors v
of vertex u
as indicated by mode
. w_uv
denotes the weighted adjacency matrix
and k_v
is the neighbors' degree, specified by neighbor_degree_mode
.
A list with two members:
knn 
A numeric vector giving the
average nearest neighbor degree for all vertices in 
knnk 
A numeric vector, its length is the maximum (total) vertex degree in the graph. The first element is the average nearest neighbor degree of vertices with degree one, etc. 
Gabor Csardi csardi.gabor@gmail.com
Alain Barrat, Marc Barthelemy, Romualdo PastorSatorras, Alessandro Vespignani: The architecture of complex weighted networks, Proc. Natl. Acad. Sci. USA 101, 3747 (2004)
# Some trivial ones g < make_ring(10) knn(g) g2 < make_star(10) knn(g2) # A scalefree one, try to plot 'knnk' g3 < sample_pa(1000, m=5) knn(g3) # A random graph g4 < sample_gnp(1000, p=5/1000) knn(g4) # A weighted graph g5 < make_star(10) E(g5)$weight < seq(ecount(g5)) knn(g5)