繁体   English   中英

网络度

[英]Degree of a Network

我已经开始在R中使用网络。我知道R中有一个名为igraph的程序包,它具有许多用于网络分析和可视化的功能。 我想计算一个小型网络的程度。 例如

mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)

现在,要获取每个节点的度数,我可以简单地在igraph使用命令degree ,然后说degree(g) 但是,如果我不想使用此度数命令,可以使用什么公式来计算度数?

您真的不想使用任何igraph函数吗? 我假设您至少要使用igraph加载或生成图形,否则这个问题就没有多大意义了。

因此,如果要将生成的图形转换为不需要igraph处理的图形,则实际上有三个选择。

如您在另一个答案中所见, get.adjlist()会给您一个邻接列表,然后程度由列表中每个向量的长度确定:

g <- degree.sequence.game(rep(2,10))
al.g <- get.adjlist(g)
sapply(al.g, length)
# [1] 2 2 2 2 2 2 2 2 2 2

get.adjacency()将为您提供一个邻接矩阵,然后可以通过简单地对行(或列,如果您有向图)求和来计算度数:

adj.g <- get.adjacency(g)
rowSums(adj.g)
# [1] 2 2 2 2 2 2 2 2 2 2

get.edgelist()在两列矩阵中返回一个简单的边缘列表。 您需要计算每个顶点在此矩阵中出现的次数才能获得其度:

el.g <- get.edgelist(g)
table(el.g)
# el.g
#  1  2  3  4  5  6  7  8  9 10 
#  2  2  2  2  2  2  2  2  2  2 

如果您阅读igraph文档,将会发现有很多方法可以做到这一点。 这是一个 获取邻接表,计算每个元素的长度:

mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)
unlist(lapply(get.adjlist(g),length))
[1] 2 3 5

还有一个:

> mydegree = c(3,5,2,2,4,2,5,6,7)
> g=degree.sequence.game(mydegree)
> unlist(lapply(get.adjlist(g),length))
[1] 3 5 2 2 4 2 5 6 7

还有一个:

> degree(graph.famous("Zachary"))
 [1] 16  9 10  6  3  4  4  4  5  2  3  1  2  5  2  2  2  2  2  3  2  2  2  5  3
[26]  3  2  4  3  4  4  6 12 17
> unlist(lapply(get.adjlist(graph.famous("Zachary")),length))
 [1] 16  9 10  6  3  4  4  4  5  2  3  1  2  5  2  2  2  2  2  3  2  2  2  5  3
[26]  3  2  4  3  4  4  6 12 17

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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