[英]Transforming directed network into undirected while preserving degree distribution
我有一个定向网络,其中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)
这是一个有向网络,其中总学位由学位和学位组成。
我想拥有一个网络,其中每个学位也都是学位,反之亦然
因此,例如,如果node 1
到node 5
的边缘,那么node 5
也需要到node 1
的边缘。 我的主要目标是保留学位分布,即50为3,50为10。
简单地将图形设置为无向似乎可以做到这一点:
x2 <- x
edgemode(x2) <- "undirected"
edges<-edgeMatrix(x)
edgecount <- table(as.vector(edges))
table(edgecount)
给出与您的代码相同的结果。 同样,如果有向边从1到5,则无向图的边总是从5到1。单个边满足此属性。
保罗·香农提出以下建议:
library(graph)
library(igraph)
degrees=c(rep(3,50),rep(10,50))
g <- igraph.to.graphNEL(degree.sequence.game(degrees))
table(graph::degree(g))
这将产生与您的代码相同的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.