在R中为igraph对象分配边权

3
我有一个共现矩阵需要转换为igraph对象。该矩阵有三列 - node1node2freq
我已经使用graph_from_edgelist命令创建了图形。
g <- graph_from_edgelist(as.matrix(coOccurDf[1:n,1:2]), directed=F)

我现在需要为边分配权重。我尝试使用了两个函数,它们似乎都可以完成同样的工作,但是没有成功。

set.edge.attribute(g, "weight", index=E(g), coOccurDf[1:n,]$freq)

并且

set_edge_attr(g, "weight", index=E(g), coOccurDf[1:n,]$freq)

这两个命令都不会出错,但是当我尝试使用以下命令查看权重时:

E(g)$weight

它只是显示NULL

任何帮助都将不胜感激。


哦,我真傻。我以为它在修改原始内容的同时进行了修改。如果您将其编写为答案,我会接受的!谢谢。 - wrahool
3
顺便提一下,使用 E(g)$weight <- whatever 写法比使用 set_edge_attr 更加简洁。它可以使代码更加清晰易懂,同时达到相同的效果。 - Tamás
1个回答

2
您可以按以下方式返回igraph对象的权重:
edge.attributes(g)$weight

E(g)$weight

您可以通过以下任一方式为 igraph 对象设置权重:
edge.attributes(g)$weight <- coOccurDf[1:n,]$freq

E(g)$weight <- coOccurDf[1:n,]$freq

使用set.edge.attribute函数,它会返回一个新的带权图。如果要将其分配给对象g,而不是将带权图打印到控制台上:

g <- set.edge.attribute(g, "weight", index=E(g), coOccurDf[1:n,]$freq)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接