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

如何用R语言检测分子中构成环结构的原子节点?

用R语言检测分子环结构中的原子

核心思路

分子的原子和化学键本质是无向图结构,环检测等价于找出图中的所有简单环(顶点不重复的环),再提取这些环包含的所有原子编号即可。R中igraph包是处理这类图问题的合适工具。

步骤与代码示例

假设你的数据结构:

  • nodes包含列:atom_id(原子编号)、X、Y
  • edges包含列:from(起始原子编号)、to(终止原子编号)
  1. 安装并加载igraph包
# 首次使用需安装
install.packages("igraph")
library(igraph)
  1. 构建无向图对象
    将edges转换为igraph能识别的无向图,同时关联nodes的属性:
# 若edges存在重复键(多重键),先去重优化效率
edges <- unique(edges)
# 构建无向图
g <- graph_from_data_frame(edges, directed = FALSE, vertices = nodes)
  1. 检测所有简单环
    使用simple_cycles()函数获取图中所有简单环的顶点集合,可通过参数限定环的最小/最大大小:
# 获取所有简单环,比如指定最小环大小为3(默认值)
cycles <- simple_cycles(g, min.length = 3)
  1. 提取环中的原子编号
    将所有环的顶点合并后去重,得到所有属于环结构的原子:
ring_atoms <- unique(unlist(cycles))
# 按需求排序输出
sort(ring_atoms)

补充说明

  • 若数据包含多个独立分子(多个子图),可拆分后分别检测:
subgraphs <- decompose(g)
all_ring_atoms <- lapply(subgraphs, function(sg) {
  cycles <- simple_cycles(sg)
  unique(unlist(cycles))
})
  • simple_cycles()返回的顶点索引与nodes的行顺序对应,直接提取即可匹配原子编号。

内容的提问来源于stack exchange,提问作者Bachi Shashikadze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:40:07