我编写了一个代码,使用neighbors function和distance function查找图表中所有相邻顶点的邻居之间的距离。
我有一个循环来读取图中的所有边,然后找到相邻顶点的每对邻居之间的距离。
函数distances()
的输出是一个矩阵,例如,如果我有5个边,那么我将得到5个矩阵,每个矩阵将根据所选边中每个顶点的邻居数包含许多距离,而我想要只获得一个包含邻居之间所有距离的矩阵(在我的例子中是33个距离)将其转换为向量,或者从头开始使用循环将函数distances
的输出作为向量。
library(igraph)
data<-matrix(c(1,3,1,4,2,3,2,4,3,4),ncol=2,byrow=TRUE)
dataf<-as.data.frame(data)
df <- graph.data.frame(d = data, directed = FALSE)
for (edge in 1:length(E(df))){
v1<-ends(graph = df, es = edge)[1]
v2<-ends(graph = df, es = edge)[2]
n1<-neighbors(df,v1,mode=c("all"))
n2<-neighbors(df,v2,mode=c("all"))
ds<-distances(df, v = n1, to = n2, mode = c("all"))
for (i in 1:length(n1)){
for (j in 1:length(n2)){
#print(ds[i,j])
}
}
}
我在所有试验中都失败了,在一个矩阵中得到所有的ditances或定义一个循环,以便我可以将距离存储在一个向量中。
感谢您提供任何帮助。
答案 0 :(得分:1)
怎么样?
dsList<-list()
for (edge in 1:length(E(df))){
v1<-ends(graph = df, es = edge)[1]
v2<-ends(graph = df, es = edge)[2]
n1<-neighbors(df,v1,mode=c("all"))
n2<-neighbors(df,v2,mode=c("all"))
ds<-distances(df, v = n1, to = n2, mode = c("all"))
dsList[[edge]]<-ds
for (i in 1:length(n1)){
for (j in 1:length(n2)){
#print(ds[i,j])
}
}
}
这是你要找的结果吗?
> unlist(dsList)
[1] 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 2 1 2 0 1 1 1 1