假设下面的数据框是一个边缘列表(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是顶点的属性,我们不感兴趣。