首先,我不得不说我是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}},这也是不正确的,对吧?
有什么需要的吗?
答案 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
以这种方式查看各列,您可以看到对于示例,我们已经获得了所有可能的对。