You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R igraph将多个简单图合并为多重图(替代graph.union)?

在R igraph中合并简单图为多重图的替代方法

graph.union会自动对重复边去重,所以没法得到你想要的多重图。这里有两种直接的替代方案:

方案一:用+运算符直接合并

igraph里的+运算符会保留所有边(包括重复的顶点对),直接合并两个图就能得到多重图:

G <- graph_from_literal(1-2:3-4-5:6)
E(G)$at <- rep.int("a",6)
G2 <- graph_from_literal(6-7-5-4)
E(G2)$at <- c("b","b","b")

# 直接用+合并
G3 <- G + G2

# 验证结果
is.simple(G3)  # 输出FALSE,确认是多重图
E(G3)$at       # 可以看到所有边的属性,包括4-5之间的两条边(分别带a和b属性)
plot(G3)

方案二:手动合并边数据后创建新图

如果需要更灵活地控制边的合并逻辑,可以手动提取两个图的边数据,合并后创建新的多重图:

# 提取所有顶点(去重)
all_vertices <- unique(c(V(G)$name, V(G2)$name))

# 转换边为数据框,保留属性
edges_g <- as.data.frame(E(G))[, c("from", "to", "at")]
edges_g2 <- as.data.frame(E(G2))[, c("from", "to", "at")]

# 合并边数据
combined_edges <- rbind(edges_g, edges_g2)

# 创建多重无向图
G3 <- graph_from_data_frame(combined_edges, vertices = all_vertices, directed = FALSE)

# 验证
is.simple(G3)  # 输出FALSE
E(G3)$at       # 查看所有边的属性

两种方法都能保留重复的边,满足你生成多重图的需求。

内容的提问来源于stack exchange,提问作者Sebastián

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:31:40