如何使用R的igraph为带组织信息的蛋白互作数据构建无向图
问题解答
数据结构选择结论
优先选择边列表作为输入结构,完全可以保留所有组织特异性标注信息,不推荐使用邻接矩阵,原因如下:
- 邻接矩阵单单元格仅能存储单一数值,无法同时存储多个组织的二元标注,若按组织单独构建邻接矩阵,组织数量较多时管理成本极高
- 20万条互作对应的蛋白节点数量通常在数千到数万级别,邻接矩阵会产生极高的稀疏度,内存占用是边列表的数十到上百倍,运行效率极低
- 边列表支持直接绑定自定义边属性,可直接将所有组织标注作为边属性存储在igraph对象中,后续按组织筛选、统计都更便捷
具体实现代码示例
# 加载依赖包 library(igraph) library(dplyr) # 假设df为通过DBI/RMySQL从MySQL读取的原始互作数据表 # 提取所有组织列的列名 tissue_cols <- setdiff(colnames(df), c("symbol1", "symbol2")) # 预处理:过滤所有组织标注均为0的无效互作行 df_clean <- df %>% filter(rowSums(across(all_of(tissue_cols))) > 0) # 基于边列表构建无向图,所有组织列自动转为边属性存储 ppi_graph <- graph_from_data_frame(df_clean, directed = FALSE)
常用操作示例
如果需要提取单组织的特异性PPI子网络,直接按边属性筛选即可:
# 提取骨组织(bone)的特异性互作子网络 bone_ppi <- subgraph.edges(ppi_graph, which(E(ppi_graph)$bone == 1)) # 提取肾上腺(adrenal_gland)的特异性互作子网络 adrenal_ppi <- subgraph.edges(ppi_graph, which(E(ppi_graph)$adrenal_gland == 1))
内容的提问来源于stack exchange,提问作者bi.nb21
相关产品推荐
相关产品推荐

