我有一个图表,需要所有节点之间的最短距离。 现在我做了以下功能,
shortestPath <- function(streets, length)
{
streets <- matrix(streets, byrow=TRUE, ncol=2) # from -> to
g <- graph.data.frame(as.data.frame(streets)) # create graph, see plot(g)
return <- shortest.paths(g, weights = length) # return routes lengths
}
此处streets
是一个向量,其中包含我们有边的数据,length
(显然)是边长。
我有以下图表,其中每条边的长度为2,请注意图形必须是无向的。
您可以使用以下数据重现该问题。
# Data
edges <- c(1,2, 2,3, 3,4, 4,5, 2,6, 3,7, 4,8, 6,8);
length <- rep(2,8);
aantalNodes <- 8;
# Determine shortest path
routes <- matrix(shortestPath(edges,length), byrow=FALSE, ncol=aantalNodes);
我们清楚地看到节点6和节点8之间的最短路径长度为2,但是,此函数返回长度为4.出了什么问题?我已经修了两天了。期待你的帮助!
答案 0 :(得分:1)
您可能想查看shortestPath(edges,length)
的rownames和colnames。这真的很有启发......
res <- shortestPath(edges,length)
res[order(as.integer(rownames(res))),
order(as.integer(colnames(res)))]