边的子集

时间:2018-07-29 15:51:37

标签: r igraph

首先,我不得不说我是R的新手,我的第一印象非常好,因此我决心精通R。好吧,我在“ igraph”包中有一个简单的无向图,我想生成其边缘的所有子集。我已经看到两个函数可以做到这一点,一个是来自“ combinat”包的“ combn”,另一个是来自“ sets”包的“ set_combn”(如果我没记错的话)。但是,他们都不满足我的要求,而且我不太了解正在发生的事情。更准确地说,我的图具有以下边列表:(1,2),(1,3),(2,3)。

现在,我想生成具有两个边的所有子集,并按如下方式调用函数“ combn”:combn(mylist,2)。结果是一个数组,其中包含成对的顶点(我认为应该是成对的边),此外,还有重复的成对对。

另一方面,如果我调用set_combn(mylist,2),它将得到以下结果:{{1},{2},{3},{1、2},{1、3},{ 2,3}},这也是不正确的,对吧?

有什么需要的吗?

1 个答案:

答案 0 :(得分:1)

我认为我可以证明您的要求。如果这不是您想要的,请告诉我,我将删除答案。

首先,您的测试图。您似乎具有所有可能的连接的三个节点。有多种方法可以做到这一点,但是一个简单的方法是这样:

library(igraph)

g = make_full_graph(3)
E(g)
+ 3/3 edges from a1c6ff4:
[1] 1--2 1--3 2--3

现在,我们有了一个带有所需边列表的图形,让我们获取边的组合。您可能已经回答了您的问题,但不知道。您可以使用combn获得带有两个边的子集。

(CB2 = combn(E(g), 2))
     [,1] [,2] [,3]
[1,]    1    1    2
[2,]    2    3    3

这是 not ,不显示任何有关顶点的信息。相反,这些列向您显示了所有可能的边缘ID 对。您可以使用边缘ID的列,以更明确地获取边缘。例如,第一列告诉您一对边缘是边缘1和2。您可以使用该列来引用这些边缘。

E(g)[CB2[,1]]
+ 2/3 edges from a1c6ff4:
[1] 1--2 1--3 

以这种方式查看各列,您可以看到对于示例,我们已经获得了所有可能的对。