R中无向图中的循环

时间:2013-07-09 15:42:43

标签: r graph-theory cycle

我有一个无向图,我想做的是检测其中有三个或更多节点的周期。 R中有一个库可以做到吗?如果没有,我可以实现一个简单的算法。

test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5))

我希望它能以1,2,3以及它找到的任何其他周期返回。

1 个答案:

答案 0 :(得分:3)

好吧,这不会给你周期中的实际节点,但会计算图表中每个等级的周期,所以这是一个开始。

library(igraph)
test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5))
g <- graph.data.frame(test)

cycles <- t(sapply(3:dim(test)[1], function(x) {v=graph.motifs.no(g, size=x); c(x,v)}))
colnames(cycles) <- c("size","count")

     size count
[1,]    3     1
[2,]    4     0

我建议你到处使用igraph图书馆:我找不到你的解决方案,但我怀疑你找到答案的地方。 graph.motifs看起来很有希望,但我无法解释结果。

如果它不必是R,则python中的networkx库具有simple_cycles()函数,该函数应该足以满足您的需求。

import networkx as nx
from networkx.algorithms.cycles import simple_cycles
g = nx.DiGraph()
g.add_edge(1,2)
g.add_edge(2,3)
g.add_edge(3,4)
g.add_edge(3,1)
g.add_edge(4,1)
simple_cycles(g)

# [[1,2,3,1],[1,2,3,4,1]]