添加缺少的共同边线,同时不更改R(igraph)中现有共同边线的属性

时间:2018-06-19 18:53:57

标签: r igraph directed-graph edges

我有一个有向图G。G中的某些边是倒数,有些不是。对于倒数边缘,边缘属性可能不同。也就是说var layout = { title: 'Coeficientes', showlegend: true, legend: { "orientation": "h" }, width: 800, height: 580, autosize: true, margin: { l: 50, r: 70, b: 50, t: 50, pad: 2 }, xaxis: {title: 'Ângulo [graus]'}, yaxis: {title: '[kN/(m/s)²]'}, yaxis2 = { title: '[kN.m/(m/s)²]', overlaying: 'y', side: 'right' } } 可能不等于E(v1,v2)$att

我需要填写所有缺失的倒数边(也就是说,如果E(v2,v1)$attE(v2,v1)不存在,我想创建E(v1,v2)并从{{复制所有属性信息1}})。

如果倒数边缘确实存在,则需要保留唯一的边缘属性信息。

有很多优势和属性,所以我在这里避免循环。当前,E(v2, v1)是有向图但不完整的图,我:

E(v1, v2)

与此有关的唯一问题是g1,即,我将覆盖现有的相互边缘属性信息。我认为我可以标记#make undirected with loops for reciprocal friendships g2 <- as.undirected(g1, mode = c("each")) #force everything to be directed, create new edges g <- as.directed(g2, mode = c("mutual")) #get rid of the double loops. gnew <- simplify(g, remove.multiple = TRUE, edge.attr.comb = "random") 中缺少的相互边缘,并使用edge.attr.comb = "random"添加必要的边缘(并复制其属性信息),但是在索引边缘时遇到了困难。我一定错过了一个简单的解决方案。例子:

g1

1 个答案:

答案 0 :(得分:1)

弄清楚了。也许不是最有说服力的解决方案,但它可行。 例如,

g <- graph_from_literal(10-+40, 10-+30, 20+-+40)
E(g)$att1 <- c(1,2,3, 4)
E(g)$att2 <- c(10, 11, 12, 13)

######################################################################

test <- which((which_mutual(g) == FALSE))

head <- head_of(g,test)
tail <- tail_of(g,test)

combine <- matrix(c(head,tail), ncol = length(test), byrow = TRUE)
combineV <- as.vector(combine)

attributes <- list(att1 = E(g)$att1[test],att2 = E(g)$att2[test])

gnew <- add_edges(g,combineV, attr = attributes)