我正在尝试在R中重新创建Biclique Communities方法(Lehmann, Schwartz, & Hansen, 2008),该方法依赖于Ka,b biclique的定义。下面的例子显示了两个相邻的K2,2 bicliques - 第一个集团是{A,B,1,2},第二个集团是{B,C,2,3}。我希望能够使用R识别这些派系,以便我可以将其应用于更广泛的数据集。
到目前为止,我已将我的尝试纳入R中,我遇到了以下两个问题:
示例代码:
library(igraph)
clique.community <- function(graph, k) {
clq <- cliques(graph, min=k, max=k)
edges <- c()
for (i in seq_along(clq)) {
for (j in seq_along(clq)) {
if ( length(unique(c(clq[[i]], clq[[j]]))) == k+1 ) {
edges <- c(edges, c(i,j))
}
}
}
clq.graph <- simplify(graph(edges))
V(clq.graph)$name <- seq_len(vcount(clq.graph))
comps <- decompose.graph(clq.graph)
lapply(comps, function(x) {
unique(unlist(clq[ V(x)$name ]))
})
}
users <- c('A', 'A', 'B', 'B', 'B', 'C', 'C')
resources <- c(1, 2, 1, 2, 3, 2, 3)
cluster <- data.frame(users, resources)
matrix <- as.data.frame.matrix(table(cluster))
igraph <- graph.incidence(matrix)
clique.community(igraph, 2)
walktrap.community(igraph)
答案 0 :(得分:1)
请注意,由于comb <- combn(vMode1, k)
变得非常大,即使对于小(密集)图形和k,l值,上述解决方案也会变得非常低效。
在https://github.com/YupingLu/biclique开发的“biclique”包中可以找到更有效的解决方案。
答案 1 :(得分:0)
我设法在Sisob workbench
中找到了这个脚本clubs