## Introduction Network theory has beenused for many years in the modeling and analysis of complex systems, asepidemiology, biology and biomedicine . As the data evolves and becomesmore heterogeneous and complex, monoplex networks become anoversimplification of the corresponding systems. This imposes a need togo beyond traditional networks into a richer framework capable ofhosting objects and relations of different scales, called MultilayeredNetworkMully,multilayer networks,is an R package that provides a multilayer network framework. Using thispackage, the user can create, modify and visualize graphs with multiplelayers. This package is an extension to theigraph package thatprovides a monolayer graph framework. The package is implemented as apart oftheMultipath Project directed byDr. FrankKramer . ## Publication More information and references can be foundin the mully paper:
https://www.mdpi.com/2073-4425/9/11/519
mully is now available on CRAN !!
require(devtools)install_github("frankkramer-lab/mully")library(mully)In this section, we provide a demo to test the package by callingsome of the function. After running this script, you will have a graph gwith 3 layers and 8 nodes. the graph can also be modified by callingother functions. Please refer to help to see the available functions.### Create new mully graph
g<-mully("MyFirstMully",direct = F) g<-addLayer(g,c("Gene","Drug","Drug","Disease")) g=addNode(g,"d1","disease",attributes=list(type="t1"))print("Node d1 added as disease") g=addNode(g,"d2","disease",attributes=list(type="t1"))print("Node d2 added as disease") g=addNode(g,"d3","disease",attributes=list(type="t1"))print("Node d3 added as disease") g=addNode(g,"dr1","drug",attributes=list(effect="strong"))print("Node dr1 added as drug") g=addNode(g,"dr2","drug",attributes=list(effect="strong"))print("Node dr2 added as drug") g=addNode(g,"dr3","drug",attributes=list(effect="moderate"))print("Node dr3 added as drug") g=addNode(g,"g1","gene",attributes=list(desc="AF"))print("Node g1 added as gene") g=addNode(g,"g2","gene",attributes=list(desc="BE"))print("Node g2 added as gene")#See vertices attributesprint(getNodeAttributes(g))#The Result:# name n type effect desc# 1 d1 3 t1 <NA> <NA># 2 d2 3 t1 <NA> <NA># 3 d3 3 t1 <NA> <NA># 4 dr1 2 <NA> strong <NA># 5 dr2 2 <NA> strong <NA># 6 dr3 2 <NA> moderate <NA># 7 g1 1 <NA> <NA> AF# 8 g2 1 <NA> <NA> BE g=addEdge(g,"dr1","d2",list(name="treats")) g=addEdge(g,"dr1","d2",list(name="extraEdge")) g=addEdge(g,"d2","g1",list(name="targets")) g=addEdge(g,"g2","dr3",list(name="mutates and causes")) g=addEdge(g,"dr3","d3",list(name="treats"))print(getEdgeAttributes(g)#The Result:# V1 V2 name# 1 d2 dr1 treats# 2 d2 dr1 extraEdge# 3 d2 g1 targets# 4 dr3 g2 mutates and causes# 5 d3 dr3 treatsremoveEdge(g,"d2","dr1",multi=T)#Create a Second graph g1=mully() g1=addLayer(g1,c("protein","drug","gene")) g1=addNode(g1,"dr4","drug",attributes=list(effect="strong")) g1=addNode(g1,"dr5","drug",attributes=list(effect="strong")) g1=addNode(g1,"dr6","drug",attributes=list(effect="moderate")) g1=addNode(g1,"p1","protein") g1=addNode(g1,"p2","protein") g1=addNode(g1,"p3","protein") g1=addNode(g1,"g3","gene") g1=addNode(g1,"g4","gene") g1=addEdge(g1,nodeStart ="p2",nodeDest ="p3",attributes =list(name="interacts")) g1=addEdge(g1,nodeStart ="dr6",nodeDest ="g4",attributes =list(name="targets"))#Merge both graphs g12=merge(g,g1)#Print the graphprint(g12)# Printing this graph gives this result:# mully -- MyFirstMully# 4 Layers:# ID Name NameLower# 1 1 Gene gene# 2 2 Drug drug# 3 3 Disease disease# 4 4 protein protein## 16 Nodes:# name n type effect desc# 1 d1 3 t1 <NA> <NA># 2 d2 3 t1 <NA> <NA># 3 d3 3 t1 <NA> <NA># 4 dr1 2 <NA> strong <NA># 5 dr2 2 <NA> strong <NA># 6 dr3 2 <NA> moderate <NA># 7 g1 1 <NA> <NA> AF# 8 g2 1 <NA> <NA> BE# 9 dr4 2 <NA> strong <NA># 10 dr5 2 <NA> strong <NA># 11 dr6 2 <NA> moderate <NA># 12 p1 4 <NA> <NA> <NA># 13 p2 4 <NA> <NA> <NA># 14 p3 4 <NA> <NA> <NA># 15 g3 1 <NA> <NA> <NA># 16 g4 1 <NA> <NA> <NA>## 7 Edges:# V1 V2 name# 1 d2 dr1 treats# 2 d2 dr1 extraEdge# 3 d2 g1 targets# 4 dr3 g2 mutates and causes# 5 d3 dr3 treats# 6 p2 p3 interacts# 7 dr6 g4 targetsplot(g12,layout ="scaled")
plot3d(g12)
mully functions are divided into different files depending on theirfunctionnality range:Constructor,LayersFunctions ,NodeFunctions ,EdgeFunctions ,MergeFunction ,VisualizationFunctions ,ImportFunctions ,ExportFunctions ,Demo.
| Function | Description |
|---|---|
mully(name,direct) | Constructor Function, Create an empty multilayered graph |
print(g) | Print function |
addLayer(g, nameLayer) | Add a layer or a set of layers to a graph |
removeLayer(g, name,trans) | Delete a layer or a set of layers from a graph |
isLayer(g, name) | Verify if the layer exists in a graph |
getLayersCount(g) | Get the number of layers in a graph |
getLayer(g, nameLayer) | Get the nodes on a layer in a graph |
getNode(g,nameNode) | Get a node from a graph |
getIDNode(g,nameNode) | Get the id of a node |
addNode(g, nodeName, layerName, attributes) | Add a node with assigned layer and attributes to a graph |
removeNode(g, name,trans) | Delete a node or a set of nodes from a graph |
getNodeAttributes(g,nameNode) | Get the attributes of one or all nodes |
addEdge(g, nodeStart, nodeDest, attributes) | Add an edge |
removeEdge(g, nodeStart, nodeDest,attributes, multi) | Delete an edge |
getEdgeAttributes(g,nodeStart,nodeDest) | Get the attributes of the edges connecting two nodes or all theedges in the graph |
getIDEdge(g,nodeStart,nodeDest) | Get the ids of the edges connecting two nodes |
merge(g1,g2) | Merge or unite two graphs |
plot(g,layout) | Plot the graph in 2D |
plot3d(g) | Plot the graph in 3D using rgl |
importGraphCSV(name,direct,layers,nodes,edges) | Import a mully graph from csv files |
importLayersCSV(g,file) | Import layers to a mully graph from a CSV file |
importNodesCSV(g,file) | Import nodes to a mully graph from a CSV file |
importEdgesCSV(g,file) | Import edges to a mully graph from a CSV file |