我有一个名为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”。
对我所缺少的任何见解都将不胜感激。
答案 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”。