我有一个有向图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)$att
时E(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
答案 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)