| graph.adjacency {igraph0} | R Documentation |
graph.adjacency is a flexible function for creating
igraph graphs from adjacency matrices.
graph.adjacency(adjmatrix, mode=c("directed", "undirected", "max",
"min", "upper", "lower", "plus"), weighted=NULL, diag=TRUE,
add.colnames=NULL, add.rownames=NA)
adjmatrix |
A square adjacency matrix. From igraph version 0.5.1
this can be a sparse matrix created with the |
mode |
Character scalar, specifies how igraph should interpret the supplied
matrix. See also the |
weighted |
This argument specifies whether to create a weighted
graph from an adjacency matrix. If it is |
diag |
Logical scalar, whether to include the diagonal of the
matrix in the calculation. If this is |
add.colnames |
Character scalar, whether to add the column names as
vertex attributes. If it is ‘ |
add.rownames |
Character scalar, whether to add the row names as
vertex attributes. Possible values the same as the previous
argument. By default row names are not added. If
‘ |
graph.adjacency creates a graph from an adjacency matrix.
The order of the vertices are preserved, i.e. the vertex corresponding to the first row will be vertex 0 in the graph, etc.
graph.adjacency operates in two main modes, depending on the
weighted argument.
If this argument is NULL then an unweighted graph is
created and an element of the adjacency matrix gives the number
of edges to create between the two corresponding vertices.
The details depend on the value of the mode argument:
directedThe graph will be directed and a matrix
element gives the number of edges between two vertices.
undirectedThis is exactly the same as max,
for convenience. Note that it is not checked whether the
matrix is symmetric.
maxAn undirected graph will be created and
max(A(i,j), A(j,i)) gives the number of edges.
upperAn undirected graph will be created, only the
upper right triangle (including the diagonal) is used for the
number of edges.
lowerAn undirected graph will be created, only the
lower left triangle (including the diagonal) is used for
creating the edges.
minundirected graph will be created with
min(A(i,j), A(j,i)) edges between vertex i and
j.
plus undirected graph will be created with
A(i,j)+A(j,i) edges between vertex i and
j.
If the weighted argument is not NULL then the elements
of the matrix give the weights of the edges (if they are not zero).
The details depend on the value of the mode argument:
directedThe graph will be directed and a matrix
element gives the edge weights.
undirectedFirst we check that the matrix is
symmetric. It is an error if not. Then only the upper triangle is
used to create a weighted undirected graph.
maxAn undirected graph will be created and
max(A(i,j), A(j,i)) gives the edge weights.
upperAn undirected graph will be created, only the
upper right triangle (including the diagonal) is used (for the
edge weights).
lowerAn undirected graph will be created, only the
lower left triangle (including the diagonal) is used for
creating the edges.
minAn undirected graph will be created,
min(A(i,j), A(j,i)) gives the edge weights.
plusAn undirected graph will be created,
A(i,j)+A(j,i) gives the edge weights.
An igraph graph object.
Gabor Csardi csardi@rmki.kfki.hu
graph and graph.formula for
other ways to create graphs.
adjm <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.9,0.1)), ncol=10)
g1 <- graph.adjacency( adjm )
adjm <- matrix(sample(0:5, 100, replace=TRUE,
prob=c(0.9,0.02,0.02,0.02,0.02,0.02)), ncol=10)
g2 <- graph.adjacency(adjm, weighted=TRUE)
E(g2)$weight
## various modes for weighted graphs, with some tests
nzs <- function(x) sort(x [x!=0])
adjm <- matrix(runif(100), 10)
adjm[ adjm<0.5 ] <- 0
g3 <- graph.adjacency((adjm + t(adjm))/2, weighted=TRUE,
mode="undirected")
g4 <- graph.adjacency(adjm, weighted=TRUE, mode="max")
all(nzs(pmax(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g4)$weight))
g5 <- graph.adjacency(adjm, weighted=TRUE, mode="min")
all(nzs(pmin(adjm, t(adjm))[upper.tri(adjm)]) == sort(E(g5)$weight))
g6 <- graph.adjacency(adjm, weighted=TRUE, mode="upper")
all(nzs(adjm[upper.tri(adjm)]) == sort(E(g6)$weight))
g7 <- graph.adjacency(adjm, weighted=TRUE, mode="lower")
all(nzs(adjm[lower.tri(adjm)]) == sort(E(g7)$weight))
g8 <- graph.adjacency(adjm, weighted=TRUE, mode="plus")
d2 <- function(x) { diag(x) <- diag(x)/2; x }
all(nzs((d2(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g8)$weight))
g9 <- graph.adjacency(adjm, weighted=TRUE, mode="plus", diag=FALSE)
d0 <- function(x) { diag(x) <- 0 }
all(nzs((d0(adjm+t(adjm)))[lower.tri(adjm)]) == sort(E(g9)$weight))
## row/column names
rownames(adjm) <- sample(letters, nrow(adjm))
colnames(adjm) <- seq(ncol(adjm))
g10 <- graph.adjacency(adjm, weighted=TRUE, add.rownames="code")
summary(g10)