在不保留度数分布的同时将有向网络转换为无向网络

时间:2014-02-04 15:51:17

标签: r graph bioconductor

我有一个定向网络,其中50个节点的度数为3,另外50个节点的度数为10。

source("http://bioconductor.org/biocLite.R")
biocLite("graph")

#load graph and make the specified graph
library(graph)
degrees=c(rep(3,50),rep(10,50))
names(degrees)=paste("node",seq_along(degrees)) #nodes must be names
x=randomNodeGraph(degrees)

#verify graph
edges=edgeMatrix(x)
edgecount=table(as.vector(edges))
table(edgecount)

这是一个有针对性的网络,其总学位由indegree和outdegree组成。

我希望有一个网络,每个indegree也是一个outdegree,反之亦然

因此,例如,如果node 1的边缘为node 5,那么node 5也需要有node 1的边缘。我的主要目标是保持学位分布,即50度,3度,50度,10度。

2 个答案:

答案 0 :(得分:0)

简单地将图表设置为无向图似乎是这样做的:

x2 <- x
edgemode(x2) <- "undirected"
edges<-edgeMatrix(x)
edgecount <- table(as.vector(edges))
table(edgecount)

提供与代码相同的结果。 此外,如果存在从1到5的边,则无向图将始终具有从5到1的边。单个边满足此属性。

答案 1 :(得分:0)

Paul Shannon提出以下建议:

library(graph)
library(igraph)
degrees=c(rep(3,50),rep(10,50))
g <- igraph.to.graphNEL(degree.sequence.game(degrees))
table(graph::degree(g))

这会产生与您的代码相同的结果。