igraph degree()函数的问题

时间:2012-03-09 16:41:08

标签: igraph

我有一个名为games [,]的整数N x 2表。节点/边的表转换为图形:

net <- graph.data.frame(as.data.frame(games), directed=FALSE)
deg.net <- degree(net, mode='total', loops=FALSE) 

(我意识到并非所有选项都是必要的。)

我遇到的问题是学位分布似乎只适用于学位。例如,游戏文件包含以下行:

103 86
24 103
103 2
92 103
87 103
103 101
103 44

然而igraph表示当节点103应为“7”时,节点103的度数为“3”。

对我所缺少的任何见解都将不胜感激。

2 个答案:

答案 0 :(得分:6)

你应该记住的一件事是大多数igraph函数通过它们的ID来引用顶点,它们只是从0到N-1的整数,其中N是图中顶点的数量。如果您有一个N x 2整数表(包含从零开始的顶点索引)并且您希望igraph使用整数作为顶点ID,则可以在将矩阵展平为向量后简单地使用graph构造函数按行。当您使用graph.data.frame时,假设数据框的前两列包含符号顶点名称(即,不要求它们必须是整数);这些将被分配到name顶点属性,igraph将简单地组成从0到N-1的ID。

所以,我们假设您有一个N x 2矩阵,每条边有一行:

> edges <- matrix(c(103, 86, 24, 103, 103, 2, 92, 103, 87, 103, 103, 101, 103, 44), ncol=2, byrow=T)

首先,我们在按行划分矩阵之后创建一个图形:

> g <- graph(as.vector(t(edges)))

这为您提供了一个包含7条边的有向图,并且顶点103的out / in-degrees将如预期的那样:

> ecount(g)
7
> degree(g, 103, mode="out")
4
> degree(g, 103, mode="in")
3
> degree(g, 103, mode="all")
7

如果对上面的矩阵使用graph.data.frame,igraph将构造一个图表,其中矩阵中的数字存储在name顶点属性中:

> g <- graph.data.frame(as.data.frame(edges))
> V(g)$name
[1] "103" "24"  "92"  "87"  "86"  "2"   "101" "44"

这表明名称为103的顶点实际上在图中变为顶点零:

> degree(g, 0, mode="out")
4
> degree(g, 0, mode="in")
3
> degree(g, 0, mode="all")
7

据我所知,如果图中有一个名为degree的顶点属性,name也可以直接使用顶点名称,所以你也可以这样做:

> degree(g, "103", mode="in")
3

希望这有帮助。

答案 1 :(得分:1)

您创建了无向图。这样的图表中没有进出的程度。从igraph文档link您可以得到一般的想法。你的deg.net将返回一个包含图表上所有度数(每个节点)的向量,类似于:

[1] 2 1 1 1 1 1 1

如果要获取特定节点的度数(在我们的示例中为103),则必须指定节点(appearence_order-1)。在您的示例中,您正在寻找(1st_node-1),它的节点为0.因此您必须键入:

degree(net,0,mode ='total',loops = FALSE)

将返回节点0的度数,“7”。