我有一个有向循环矩阵,需要提取任何i和j之间的所有简单路径。从igraph检索路径名列表all_simple_paths
以下是我的前任。矩阵:
>M2<-matrix(c(1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1), 5, byrow=T)
>colnames(M2)<-c("A", "B", "C", "D", "E")
>row.names(M2)=colnames(M2)
>M2
A B C D E
A 1 1 0 0 0
B 1 1 1 1 0
C 0 1 1 1 0
D 0 1 0 1 1
E 0 0 0 1 1
我使用igraph
到矩阵转换为使用graph_from_adjency_matrix
函数的曲线图的对象。
>graph<-graph_from_adjacency_matrix(M2, mode=c("directed"), weighted=NULL, diag=F, add.colnames=NULL, add.rownames=NA)
>graph
IGRAPH DN-- 5 9 --
+ attr: name (v/c)
+ edges (vertex names):
[1] A->B B->A B->C B->D C->B C->D D->B D->E E->D
从那里我使用all_simple_paths
函数来获取i和j之间的所有简单路径。这里开始我的问题。
1)我可以指定j(参数to
有to=V(graph)
)是所有可能的结束顶点。但我无法指定from
参数来计算查找所有顶点的路径有可能的起点。我必须一次性指定每个变量。任何解决方案
2)all_simple_path
函数运行良好,给我所有简单的路径之间我和j,例如开始在A
,在任何可能的Ĵ结束的简单路径:
>Simple_path_list<-all_simple_paths(graph, from ="A", to=V(graph), mode = c("out"))
>Simple_path_list
[[1]]
+ 2/5 vertices, named:
[1] A B
[[2]]
+ 3/5 vertices, named:
[1] A B C
[[3]]
+ 4/5 vertices, named:
[1] A B C D
[[4]]
+ 5/5 vertices, named:
[1] A B C D E
[[5]]
+ 3/5 vertices, named:
[1] A B D
[[6]]
+ 4/5 vertices, named:
[1] A B D E
我的问题是,我需要收集所有这些路径,并把名单上,如:
Paths
A B
A B C
A B C D
A B C D E
A B D
A B D E
我试图创建一个列表并使用正常的list<-Simple_path_list[1]
左右调用路径名称,但我总是会检索与路径相关的顶点数量信息(例如,+ 4/5 vertices, named
)。关于如何仅检索路径名称而不检索其他信息的任何想法?
确定,通过使用 '> lapply(V(图形),函数(X)all_simple_paths(图中,从= X)中发现的答案的点1) )' 它给出了每个开始变量的所有可能的简单路径的列表。 –