igraph degree()函数的问题

Aen*_*gus 2 igraph

我有一个N x 2整数表,称为游戏[,].节点/边的表转换为图形:

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

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

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

103 86
24 103
103 2
92 103
87 103
103 101
103 44
Run Code Online (Sandbox Code Playgroud)

然而,igraph表示节点103的程度为"3",应该为"7".

任何有关我所缺少的信息都将受到赞赏.

Tam*_*más 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)
Run Code Online (Sandbox Code Playgroud)

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

> g <- graph(as.vector(t(edges)))
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个包含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
Run Code Online (Sandbox Code Playgroud)

如果使用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"
Run Code Online (Sandbox Code Playgroud)

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

> degree(g, 0, mode="out")
4
> degree(g, 0, mode="in")
3
> degree(g, 0, mode="all")
7
Run Code Online (Sandbox Code Playgroud)

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

> degree(g, "103", mode="in")
3
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.