如何在R的igraph对象中提取直径边序列及指定顶点间边序列
解决igraph中提取直径边序列的问题
嘿,我来帮你搞定这两个igraph相关的问题~
通用方法:提取igraph对象中直径的边序列
要提取构成图直径的边序列,核心思路是先获取直径对应的顶点路径,再基于这个顶点路径提取对应的边。具体步骤如下:
- 获取直径的顶点路径:用
get_diameter()函数得到构成直径的顶点顺序,比如:
library(igraph) library(igraphdata) data(karate) # 获取直径对应的顶点序列 diam_vertex_seq <- get_diameter(karate)
- 提取对应边序列:利用igraph的
E()函数,通过path参数传入刚才的顶点序列,就能直接得到这条路径上的所有边:
# 提取直径的边序列 diam_edge_seq <- E(karate, path = diam_vertex_seq) # 查看边的详细信息(转成数据框更直观) as.data.frame(diam_edge_seq)
针对你的具体案例:提取Actor 16与Actor 17之间的边序列
你已经通过farthest_vertices()找到了最远的两个顶点,接下来可以这样提取它们之间的边序列:
方法一:直接用已知的顶点路径
你已经通过get_diameter()得到了顶点序列[Actor 16, John A, Actor 20, Mr Hi, Actor 6, Actor 17],直接把这个序列传给E()函数的path参数即可:
# 用你得到的顶点序列 target_verts <- V(karate)[c("Actor 16", "John A", "Actor 20", "Mr Hi", "Actor 6", "Actor 17")] edge_seq <- E(karate, path = target_verts) # 打印边序列 print(edge_seq)
方法二:从最远顶点自动获取路径(更通用)
如果不想手动输入顶点序列,可以结合farthest_vertices()和get.shortest.paths()来自动获取路径,再提取边:
# 获取最远顶点对 farthest_pair <- farthest_vertices(karate) # 获取两个顶点之间的最短路径(也就是直径路径) path_verts <- get.shortest.paths(karate, from = farthest_pair$vertices[1], to = farthest_pair$vertices[2])$vpath[[1]] # 提取对应的边序列 edge_seq <- E(karate, path = path_verts)
执行完上面的代码后,edge_seq就是连接Actor 16和Actor 17的边序列啦,你可以用as.data.frame(edge_seq)查看每条边的起点、终点和ID信息。
内容的提问来源于stack exchange,提问作者iatowks
相关产品推荐
相关产品推荐

