Use this if you are using igraph from R
This function tries to find communities in graphs via a spinglass model and simulated annealing.
cluster_spinglass( graph, weights = NULL, vertex = NULL, spins = 25, parupdate = FALSE, start.temp = 1, stop.temp = 0.01, cool.fact = 0.99, update.rule = c("config", "random", "simple"), gamma = 1, implementation = c("orig", "neg"), gamma.minus = 1 )
graph 
The input graph, can be directed but the direction of the edges is neglected. 
weights 
The weights of the edges. Either a numeric vector or

vertex 
This parameter can be used to calculate the community of a given vertex without calculating all communities. Note that if this argument is present then some other arguments are ignored. 
spins 
Integer constant, the number of spins to use. This is the upper limit for the number of communities. It is not a problem to supply a (reasonably) big number here, in which case some spin states will be unpopulated. 
parupdate 
Logical constant, whether to update the spins of the
vertices in parallel (synchronously) or not. This argument is ignored if the
second form of the function is used (ie. the ‘ 
start.temp 
Real constant, the start temperature. This argument is
ignored if the second form of the function is used (ie. the
‘ 
stop.temp 
Real constant, the stop temperature. The simulation
terminates if the temperature lowers below this level. This argument is
ignored if the second form of the function is used (ie. the
‘ 
cool.fact 
Cooling factor for the simulated annealing. This argument
is ignored if the second form of the function is used (ie. the
‘ 
update.rule 
Character constant giving the ‘nullmodel’ of the simulation. Possible values: “simple” and “config”. “simple” uses a random graph with the same number of edges as the baseline probability and “config” uses a random graph with the same vertex degrees as the input graph. 
gamma 
Real constant, the gamma argument of the algorithm. This specifies the balance between the importance of present and nonpresent edges in a community. Roughly, a comunity is a set of vertices having many edges inside the community and few edges outside the community. The default 1.0 value makes existing and nonexisting links equally important. Smaller values make the existing links, greater values the missing links more important. 
implementation 
Character scalar. Currently igraph contains two implementations for the Spinglass community finding algorithm. The faster original implementation is the default. The other implementation, that takes into account negative weights, can be chosen by supplying ‘neg’ here. 
gamma.minus 
Real constant, the gamma.minus parameter of the algorithm. This specifies the balance between the importance of present and nonpresent negative weighted edges in a community. Smaller values of gamma.minus, leads to communities with lesser negative intraconnectivity. If this argument is set to zero, the algorithm reduces to a graph coloring algorithm, using the number of spins as the number of colors. This argument is ignored if the ‘orig’ implementation is chosen. 
This function tries to find communities in a graph. A community is a set of nodes with many edges inside the community and few edges between outside it (i.e. between the community itself and the rest of the graph.)
This idea is reversed for edges having a negative weight, ie. few negative edges inside a community and many negative edges between communities. Note that only the ‘neg’ implementation supports negative edge weights.
The spinglass.cummunity
function can solve two problems related to
community detection. If the vertex
argument is not given (or it is
NULL
), then the regular community detection problem is solved
(approximately), i.e. partitioning the vertices into communities, by
optimizing the an energy function.
If the vertex
argument is given and it is not NULL
, then it
must be a vertex id, and the same energy function is used to find the
community of the the given vertex. See also the examples below.
If the vertex
argument is not given, ie. the first form is
used then a cluster_spinglass
returns a
communities
object.
If the vertex
argument is present, ie. the second form is used then a
named list is returned with the following components:
community 
Numeric vector giving the ids of the vertices in the same
community as 
cohesion 
The cohesion score of the result, see references. 
adhesion 
The adhesion score of the result, see references. 
inner.links 
The number of edges within the community
of 
outer.links 
The number of edges between the
community of 
Jorg Reichardt for the original code and Gabor Csardi csardi.gabor@gmail.com for the igraph glue code.
Changes to the original function for including the possibility of negative ties were implemented by Vincent Traag (http://www.traag.net/).
J. Reichardt and S. Bornholdt: Statistical Mechanics of Community Detection, Phys. Rev. E, 74, 016110 (2006), https://arxiv.org/abs/condmat/0603718
M. E. J. Newman and M. Girvan: Finding and evaluating community structure in networks, Phys. Rev. E 69, 026113 (2004)
V.A. Traag and Jeroen Bruggeman: Community detection in networks with positive and negative links, https://arxiv.org/abs/0811.2329 (2008).
g < sample_gnp(10, 5/10) %du% sample_gnp(9, 5/9) g < add_edges(g, c(1, 12)) g < induced_subgraph(g, subcomponent(g, 1)) cluster_spinglass(g, spins=2) cluster_spinglass(g, vertex=1)