如何计算边缘属性作为igraph中的路径长度?

时间:2017-12-01 21:26:05

标签: r path attributes igraph edge-list

假设下面的数据框是一个边缘列表(inst2和motherinst2之间的关系),并且该km是我想要计算的属性,作为已分配给边的路径。我在编码方面太新,无法制作可重复的边缘列表。

inst2 = c(2, 3, 4, 5, 6) 
motherinst2 = c(7, 8, 9, 10, 11) 
km = c(20, 30, 40, 25, 60)
df2 = data.frame(inst2, motherinst2)
edgelist = cbind(df2, km)
g = graph_from_data_frame(edgelist)

我知道如何计算图形中顶点的路径长度,但我有一些属性附加到边缘,我想总结为路径长度。它们是简单的属性(以km为单位的距离,以天为单位的时间,以及以km / day为单位的速度)。

这是我计算顶点路径(根和终端/叶子之间)的方式:

roots = which(sapply(sapply(V(g),
                    function(x) neighbors(g, x, mode = 'in')), length) == 0)

#slight tweaking this piece of code will also calculate 'terminal' nodes (or leaves). (11):

terminals = which(sapply(sapply(V(g),
                    function(x) neighbors(g, x, mode = 'out')), length) == 0)


paths= lapply(roots, function(x) get.all.shortest.paths(g, from = x, to = terminals, mode = "out")$res)

named_paths= lapply(unlist(paths, recursive=FALSE), function(x) V(g)[x])

我只想完全按照上面所做的那样做,但总结每条路径之间产生的距离,时间和速率(我将计算平均值)。如果它有助于知道如何将边添加为属性,我就像这样使用了cbind:

edgelist_df = cbind(edgelist_df, time, dist, speed)

我的图形对象(g)设置如下:

g <- graph_from_data_frame(edgelist_df, vertices = vattrib_df) 

vattrib_df是顶点的属性,我们不感兴趣。

0 个答案:

没有答案