对于任何节点 n,您可以找到边的数量into节点使用neighbors(g, n, mode="in")
。如果一个节点没有任何边进入它,那么它就是一个初始顶点。因此,您可以测试所有节点,了解有多少条边进入该节点,并选择答案为零的边。
这是一个简单的示例图:
library(igraph)
set.seed(2017)
g = erdos.renyi.game(12, 20, type="gnm", directed=TRUE)
plot(g)
现在我们可以找到根节点了。
which(sapply(sapply(V(g),
function(x) neighbors(g,x, mode="in")), length) == 0)
[1] 1 2
这表示节点 1 和 2 是源。
既然你说你是初学者,那我就简单解释一下。
function(x) neighbors(g,x, mode="in")
是一个函数,它接受一个节点作为参数并使用neighbors
返回具有从 y 到 x(x 的父级)的链接的节点 y 的列表。
sapply(V(g), function(x) neighbors(g,x, mode="in"))
将该函数应用于图中的所有节点,从而给出每个节点的父节点列表。我们对没有父节点的节点感兴趣,因此我们希望该列表的长度为零的节点。因此,我们将长度应用于父母列表并检查哪些长度为零。