igraph中是否有方法或类可以快速有效地执行此过程?
答案 0 :(得分:3)
假设您的图表位于g
,并且要使用的顶点集合位于sampled
(这是一个由基于零的顶点ID组成的向量)。
首先,我们选择至少有一个端点在sampled
中的边集:
all.vertices <- (1:vcount(g)) - 1
es <- E(g) [ sampled %--% 1:n ]
es
现在是一个&#34;边缘序列&#34;由感兴趣的边缘组成的对象。接下来,我们获取图的边缘列表(这是一个m×2矩阵)并选择与边对应的行:
el <- get.edgelist(g)[as.vector(es)+1]
这里,as.vector(es)
将边缘序列转换为由边缘序列中边缘的边缘ID组成的向量,并使用它来选择边缘列表的适当子集。请注意,我们必须在边缘ID上添加1,因为R矢量从1开始索引,但igraph边缘ID从零开始。
接下来,我们从边缘列表构造结果:
g1 <- graph(el, vcount(g), directed=is.directed(g))
请注意,g1
将包含与g
完全相同的顶点。您可以采用由采样顶点组成的子图,如下所示:
g1 <- subgraph(g1, sampled)
请注意igraph 0.6及以上的用户:igraph 0.6将切换为基于1的索引而不是基于0的索引,因此无需从all.vertices
中减去1无需向as.vector(es)
添加1。此外,igraph 0.6将包含一个名为subgraph.edges
的函数,因此可以简单地使用它:
g1 <- subgraph.edges(g, es)