将矩阵列表转换为 R 中的向量
Convert a list of matrices to a vector in R
我编写了一段代码,使用 neighbors function and 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])
}
}
}
我在所有试验中都未能获得一个矩阵中的所有距离或定义一个循环以便我可以将距离存储在一个向量中。
感谢您的帮助。
这个怎么样?
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
我编写了一段代码,使用 neighbors function and 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])
}
}
}
我在所有试验中都未能获得一个矩阵中的所有距离或定义一个循环以便我可以将距离存储在一个向量中。
感谢您的帮助。
这个怎么样?
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