lapply for graph对象中的edge_connectivity

时间:2016-10-31 02:15:50

标签: r graph igraph lapply

我有一个我想要遍历的图形对象,因此我可以在edge_connectivity中使用igraph函数获取每个节点的边连接读数。输出应如下所示:

edge_connectivity(di, "10001", "12256")
[1] 2
edge_connectivity(di, "10001", "8496")
[1] 2
edge_connectivity(di, "10001", "8558")
[1] 2

*节点名称是随机生成的整数

但是,我无法使lapply功能正常工作。以下是我一直试图通过以下方式实现此目的的代码:

library(igraph)
digraph<-read.csv('1999.csv')
di<-graph.data.frame(digraph) 
edge_connectivity<-lapply(di, function(x) x)

我知道这不对。应该是这样的: connectivity<-lapply(V(di), function(x) length(edge_connectivity(di))

但它也不正确,因为edge_connectivity函数必须具有源和目标参数,或者对于整个网络保持空白。我只是不知道如何让它自己遍历网络。

1 个答案:

答案 0 :(得分:1)

由于您希望获得网络中每对节点的边缘连接分数,您需要找到所有对的组合,并将其与函数sapply一起传递给edge_connectivity。我想你想要sapply(返回一个向量)而不是lapply(返回一个列表)。在任何一种情况下,语法都是相同的。

使用随机图表&#39;,找到combn所有可能的节点对。这将创建一个Nx2矩阵,其中N是可能的对的总数。

g <- sample_gnp(25,0.5,directed=T)a
c <- combn(V(g),2)

告诉sapplyege_connectivity函数应用于可能的节点对数(例如c中的列数)。索引每列中的第一行和第二行以获取该对中的每个节点。

sapply(1:ncol(c), function(x) edge_connectivity(g,c[1,x],c[2,x]))

这将返回图表中每对节点的连接分数。请注意sapply函数的语法。该函数应用于第一个参数(1:ncol(c))中的每个元素,其中元素替换函数中x的每个实例。