如何将一个顶点与有向边(全/入/出)从有向图g复制到一个新的有向图g1?

时间:2012-03-14 15:36:39

标签: r igraph

igraph中是否有方法或类可以快速有效地执行此过程?

1 个答案:

答案 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)