图中有没有一个方法或类可以快速有效地完成这个过程?
发布于 2012-03-17 18:58:23
让我们假设您的图是g格式的,而要使用的顶点集是sampled格式(这是一个由从零开始的顶点ID组成的向量)。
首先,我们选择至少有一个端点在sampled中的边集
all.vertices <- (1:vcount(g)) - 1
es <- E(g) [ sampled %--% 1:n ]es现在是一个由感兴趣的边组成的“边序列”对象。接下来,我们获取图的边列表(这是一个m x 2矩阵),并选择与边相对应的行:
el <- get.edgelist(g)[as.vector(es)+1]在这里,as.vector(es)将边缘序列转换为由边缘序列中的边缘的边缘it组成的向量,并使用它来选择边缘列表的适当子集。请注意,我们必须在边ID上加1,因为R向量是从1开始索引的,而图的边ID是从零开始的。
接下来,我们从边缘列表构造结果:
g1 <- graph(el, vcount(g), directed=is.directed(g))请注意,g1将包含与g相同数量的顶点。可以采用由采样顶点组成的子图,如下所示:
g1 <- subgraph(g1, sampled) 0.6及以上版本的用户注意: igraph 0.6将切换到基于1的索引,而不是基于0的索引,因此不需要从all.vertices中减去1,也不需要在as.vector(es)中添加1。此外,igraph 0.6将包含一个名为subgraph.edges的函数,因此可以简单地使用以下代码:
g1 <- subgraph.edges(g, es)https://stackoverflow.com/questions/9705035
复制相似问题