我已经开始在 R 中使用网络。我知道 R 中有一个名为的包,igraph
它具有许多用于网络分析和可视化的功能。我想计算一个小型网络的度数。例如
mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)
现在要获得每个节点的度数,我可以简单地使用命令degree
inigraph
并说degree(g)
. 但是如果我不想使用这个 degree 命令,我可以用什么公式来计算学位?
我已经开始在 R 中使用网络。我知道 R 中有一个名为的包,igraph
它具有许多用于网络分析和可视化的功能。我想计算一个小型网络的度数。例如
mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)
现在要获得每个节点的度数,我可以简单地使用命令degree
inigraph
并说degree(g)
. 但是如果我不想使用这个 degree 命令,我可以用什么公式来计算学位?
你真的不想使用任何 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