Conversions "graph" <–> (sparse) Matrix
coerce-methods-graph.RdSince 2005, package Matrix has supported coercions to and
from class graph from package
graph.
Since 2013, this functionality has been exposed via functions
T2graph and graph2T, which, unlike methods for
as(from, "<Class>"), support optional arguments.
Usage
graph2T(from, use.weights = )
T2graph(from, need.uniq = !isUniqueT(from), edgemode = NULL)Arguments
- from
for
graph2T(), an R object of class"graph";
forT2graph(), a sparse matrix inheriting from"TsparseMatrix".- use.weights
logical indicating if weights should be used, i.e., equivalently the result will be numeric, i.e. of class
dgTMatrix; otherwise the result will bengTMatrixornsTMatrix, the latter if the graph is undirected. The default looks if there are weights in the graph, and if any differ from1, weights are used.- need.uniq
a logical indicating if
frommay need to be internally “uniqified”; do not set this and hence rather use the default, unless you know what you are doing!- edgemode
one of
NULL,"directed", or"undirected". The defaultNULLlooks if the matrix is symmetric and assumes"undirected"in that case.
Value
For graph2T(), a sparse matrix inheriting from
"TsparseMatrix".
For T2graph() an R object of class "graph".
See also
Package igraph, which provides similar coercions
to and from its class igraph via functions
graph_from_adjacency_matrix and as_adjacency_matrix.
Examples
if(requireNamespace("graph")) {
n4 <- LETTERS[1:4]; dns <- list(n4,n4)
show(a1 <- sparseMatrix(i= c(1:4), j=c(2:4,1), x = 2, dimnames=dns))
show(g1 <- as(a1, "graph")) # directed
unlist(graph::edgeWeights(g1)) # all '2'
show(a2 <- sparseMatrix(i= c(1:4,4), j=c(2:4,1:2), x = TRUE, dimnames=dns))
show(g2 <- as(a2, "graph")) # directed
# now if you want it undirected:
show(g3 <- T2graph(as(a2,"TsparseMatrix"), edgemode="undirected"))
show(m3 <- as(g3,"Matrix"))
show( graph2T(g3) ) # a "pattern Matrix" (nsTMatrix)
DONTSHOW({
stopifnot(
identical(as(g3,"Matrix"), as(as(a2 + t(a2), "nMatrix"),"symmetricMatrix"))
,
identical(tg3 <- graph2T(g3), graph2T(g3, use.weights=FALSE))
,
identical(as(m3,"TsparseMatrix"), asUniqueT(tg3))
)
})
a. <- sparseMatrix(i=4:1, j=1:4, dimnames=list(n4, n4), repr="T") # no 'x'
show(a.) # "ngTMatrix"
show(g. <- as(a., "graph"))
DONTSHOW({
stopifnot(graph::edgemode(g.) == "undirected",
graph::numEdges(g.) == 2,
all.equal(as(g., "TsparseMatrix"),
as(a., "symmetricMatrix"))
)
})
}
#> Loading required namespace: graph