r中具有igraph模块化功能的问题

问题描述 投票:0回答:1

我正在尝试基于属性来计算图形的模块化。首先,我这样定义属性:

graph <- set_vertex_attr(graph, "attribute", value = as.numeric(df$attribute))

此行代码运行时未返回错误,接下来我运行模块化功能:

modularity(graph, V(graph)$attribute)

我为分类属性运行此代码,没有任何问题,但是对于数字属性(如示例中的代码,我得到此错误:

Error in modularity.igraph(graph, V(graph)$attribute) : At community.c:919 : Invalid membership vector, Invalid value

注:我的图是转换为igraph对象的邻接矩阵(380 * 380)。我试图添加到图形中的数值属性包含许多零和小于1的值。知道我在做什么错吗?

r igraph modularity
1个回答
0
投票

如果您阅读modularity.igraph的帮助页面,您会发现第二个参数是隶属度矢量,该隶属度矢量将每个顶点从1开始分配给模块。因此,如果此矢量中包含0或负数,则表示将得到无效值错误。因子很好,因为它们的级别对应于从1开始的数字。

require(igraph)

g <- barabasi.game(n = 20, m = 2)

mod1 <- rep(c(1, 2, 3, 4, 5), 8)
modularity(g, mod1)
# Modularity is implemented for undirected graphs only.
# [1] -0.04950245

mod2 <- rep(c(0, 1, 2, 3, 4), 8)
modularity(g, mod2)
# Modularity is implemented for undirected graphs only.
# Error in modularity.igraph(g, mod2) : 
# At community.c:919 : Invalid membership vector, Invalid value

如果您认为您的隶属度向量是正确的,并且希望通过它来计算模块化,则可以将其简单地转换为一个因子:

modularity(g, as.factor(mod2))
# Modularity is implemented for undirected graphs only.
# [1] -0.04950245
© www.soinside.com 2019 - 2024. All rights reserved.