如何手动分配社区和衡量模块化?

时间:2015-05-13 12:59:34

标签: r igraph modularity

我有一个网络,我想比较从各种算法中得到的模块性分数,例如: walktrap,具有由我自己选择的社区成员资格(手工分配)派生的模块化分数。例如,我希望能够为每个节点分配1或2的“社区”。到目前为止,我已经使用各种方法来尝试实现这一点,并且当我运行模块化时它们通常会崩溃R环境(graph1,assigned_communities) )。

library(igraph)
raw1 <- read.csv("C:\\edge list directed weighted.csv")
graph1 <- graph.data.frame(raw1, directed=TRUE, vertices=NULL)

attrib <- read.csv("C:\\vertex_groups.csv")

“attrib”是持有我指定组的对象。 .csv文件包含四列 - “顶点”,它是graph1中包含的唯一顶点的排序列表,以及其他具有我希望能够分配给这些顶点的社区的列,在此示例中为“group1”“group2”等。

##method1: communities object type clone
members <- as.double(attrib$group1)
nam <- as.character(attrib$vertex)
comms <- list(membership=members, vcount=vcount(graph1), names=nam, algorithm="by.hand")
class(comms) <- "communities"
modularity(graph1, membership(comms) )

第一次尝试是克隆“社区”对象。我从对应于group1的attrib对象中提取列,我想将该组指定为社区。运行该模块化命令会导致环境崩溃。

v = attrib$group1
names(v) = attrib$vertex
modularity(graph1,v)

这里,v将group1值提取为列,但也将行命名为与commmunity对象的样式匹配。这也会破坏环境。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

崩溃是由于在64位R上运行此代码引起的,我更改为32位并且崩溃停止。去搞清楚。