Apply a function to a graph considering non-diagonal structural zeros
Apply a function to a graph considering non-diagonal structural zeros
When there are structural zeros given by groups, this function applies a particular transformation function of a graph by groups returning a square matrix of the same size of the original one with structural zeros and the function applied by INDICES.
transformGraphBy(graph, INDICES, fun =function(g,...) g,...)## S3 method for class 'diffnet'transformGraphBy(graph, INDICES, fun =function(g,...) g,...)## S3 method for class 'dgCMatrix'transformGraphBy(graph, INDICES, fun =function(g,...) g,...)
Arguments
graph: A graph
INDICES: A vector of length n.
fun: A function. This function must return a matrix of class dgCMatrix with the same dimension as dim(g).
...: Further arguments passed to fun
Returns
A transformed version of the network, with the desired function applied by blocks.
Details
The transformation function fun must return a square matrix of size m∗m, where m is the size of the subgroup given by INDICES. See examples below
Examples
# Rewiring a graph by community --------------------------------------------# Two Random graphs of different sizeset.seed(123)g0 <- rgraph_ba(m=2, self=FALSE)g1 <- rgraph_ba(m=3, t=19, self=FALSE)# Need a place to store both networks together!G <- methods::new( Class ="dgCMatrix", Dim = c(1L,1L)*(nnodes(g0)+ nnodes(g1)), p = rep(0L,(nnodes(g0)+ nnodes(g1))+1L))# Filling the matrixG[1:nnodes(g0),1:nnodes(g0)]<- g0
G[(nnodes(g0)+1):nnodes(G),(nnodes(g0)+1):nnodes(G)]<- g1
# Creating an index (community)indx <- c(rep(1, nnodes(g0)), rep(2, nnodes(g1)))# Apply the rewiring algorithm per groupans <- transformGraphBy(G, indx,function(g,...){ rewire_graph(g,100,"swap")})
ans