繁体   English   中英

在保持学位分配的同时将有向网络转变为无向网络

[英]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 1node 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM