Learn R Programming

netdiffuseR (version 1.22.6)

transformGraphBy: Apply a function to a graph considering non-diagonal structural zeros

Description

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.

Usage

transformGraphBy(graph, INDICES, fun = function(g, ...) g, ...)

# S3 method for diffnet transformGraphBy(graph, INDICES, fun = function(g, ...) g, ...)

# S3 method for dgCMatrix transformGraphBy(graph, INDICES, fun = function(g, ...) g, ...)

Value

A transformed version of the network, with the desired function applied by blocks.

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

Details

The transformation function fun must return a square matrix of size \(m\times m\), where \(m\) is the size of the subgroup given by INDICES. See examples below

Examples

Run this code
# 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


Run the code above in your browser using DataLab