[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[igraph] Recommend Package for Bonacich Power
From: |
Surendar Swaminathan |
Subject: |
[igraph] Recommend Package for Bonacich Power |
Date: |
Tue, 21 Jul 2009 11:08:36 -0700 |
Hello All,
There was Solve Matrix Package error when trying to do Bonaicih power for large graph. R version 2.8.1 Can someone recommend a package to work on Philip bonacich power.
I posted the same long time back and was directed to the code.
solve() errors and crashes
I posted the error on R user list and was told to use different code still I could not solve the problem
##
### "Enhanced" by Martin Maechler:
bonpow.sparse <- function(graph, nodes = V(graph), loops = FALSE,
exponent = 1, adj.type = "both",
trace = TRUE,
rescale=FALSE, tol=1e-07)
{
stopifnot(require("igraph"),
require("Matrix"))
if(trace) {
c.width <- 30
C1 <- function(s) cat(sprintf("%-*s .. ", c.width, s))
C2 <- function() cat("[Ok]\n")
} else { C1 <- C2 <- function(...) {} }
## remove loops if requested
if (!loops) {
C1("simplify()ing graph")
graph <- simplify(graph, remove.multiple=FALSE, remove.loops=TRUE)
C2()
}
## sparse adjacency matrix
C1("d <- get.adjacency(., sparse)")
d <- get.adjacency(graph, type = adj.type, sparse=TRUE); C2()
if(trace >= 2)
cat("class(d): ", class(d),"\n")
if(!is.directed(graph)) {
## MM: unfortunately "igraph" does not return a *symmetric*
## --- sparse matrix directly, saving space and time,
## so we at least do it now :
C1("d <- as(d, \"symmetricMatrix\")")
d <- as(d, "symmetricMatrix"); C2()
}
## sparse identity matrix
vg <- vcount(graph)
if(FALSE) { ## "non-sense" :
C1("spMatrix(.) for Diagonal(vg)")
id <- spMatrix(vg, vg, i=1:vg, j=1:vg, x = rep(1, vg)); C2()
C1(" --> as(., \"dgCMatrix\")")
id <- as(id, "dgCMatrix"); C2()
}
else
id <- Diagonal(vg)
C1("M <- (id - exponent * d)")
M <- id - exponent * d ; C2()
C1("b <- degree(graph,.)")
b <- degree(graph, mode="out") ; C2()
if(trace >= 2) {
cat(" M : class ", class(M),"; dim: ", dim(M),"\n")
cat(" b : class ", class(b),"; length: ", length(b),"\n")
}
## solve it
## MM: This is "the horror" -- ("it's the economy, stupid !!")
## particularly as solve(M) is *never* sparse !!!
## He should use solve(M, b) !!
if(FALSE) {
C1("solve(M) %*% b")
ev <- solve(M, tol=tol) %*% b; C2()
} else {
C1("solve(M, b)")
ev <- solve(M, b) ; C2()
}
if (rescale) {
ev <- ev/sum(ev)
} else {
ev <- ev * sqrt(vg/sum((ev)^2))
- Hide quoted text -
}
ev[as.numeric(nodes) + 1]
Thanks in Advance.
- [igraph] Recommend Package for Bonacich Power,
Surendar Swaminathan <=