将矩阵列表转换为R中的向量

时间:2018-02-07 11:17:47

标签: r loops matrix vector igraph

我编写了一个代码,使用neighbors functiondistance 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或定义一个循环,以便我可以将距离存储在一个向量中。

感谢您提供任何帮助。

1 个答案:

答案 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