3

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

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 的度数是“3”,而它应该是“7”。

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

4

2 回答 2

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 的出/入度将如预期的那样:

> 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

希望这可以帮助。

于 2012-03-10T19:06:29.987 回答
1

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

[1] 2 1 1 1 1 1 1

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

度(净,0,模式='总',循环=假)

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

于 2012-03-10T17:07:28.113 回答