transformGraphBy function

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 nn.
  • 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 mmm*m, where mm is the size of the subgroup given by INDICES. See examples below

Examples

# Rewiring a graph by community -------------------------------------------- # Two Random graphs of different size set.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 matrix G[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 group ans <- transformGraphBy(G, indx, function(g, ...) { rewire_graph(g, 100, "swap") }) ans