Well, this won't give you the actual nodes in your cycles, but it will count the cycles of each rank in your graph, so it's a start.
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
I recommend you play around with the igraph
library anyway: I couldn't find a solution for you in there, but I suspect that's where you'll find your answer. graph.motifs
looks promising, but I wasn't able to interpret the result.
If it doesn't have to be R
, the networkx
library in python has a simple_cycles() function that should be sufficient for your needs.
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]]