GOsummaries处理基因列表触发内部服务器错误及依赖兼容问题求助
解决GOsummaries依赖旧gprofiler包及服务器内部错误问题
问题核心
需要用GOsummaries对比两组基因列表的GO富集结果,但运行gosummaries()时遇到三个问题:
- 旧版
gprofiler包已废弃,触发过时警告 - 调用旧gprofiler服务器时出现
INTERNAL SERVER ERROR - 卸载旧gprofiler仅保留
gprofiler2会导致GOsummaries因依赖缺失无法运行
报错原因
- 旧版
gprofiler包依赖的服务器接口已停止维护,导致请求失败 - GOsummaries当前版本未更新对
gprofiler2的支持,直接替换包会触发依赖冲突
解决方案
步骤1:预处理基因列表(去重)
基因列表中的重复值可能导致服务器处理异常,先去重:
# 去除重复基因 genes1 <- unique(trad_genes$SYMBOL) genes2 <- unique(genes_pvalue_EA$SYMBOL)
步骤2:用gprofiler2完成GO富集
使用新版gprofiler2获取GO富集结果,避免调用旧服务器:
library(gprofiler2) # 富集分析(以人类基因为例,可根据物种修改organism参数) gost_group1 <- gost( query = genes1, organism = "hsapiens", sources = c("GO:BP", "GO:MF", "GO:CC"), # 指定GO三个分支 user_threshold = 0.05 # 自定义显著性阈值 ) gost_group2 <- gost( query = genes2, organism = "hsapiens", sources = c("GO:BP", "GO:MF", "GO:CC"), user_threshold = 0.05 )
步骤3:转换结果格式适配GOsummaries
将gprofiler2的gost结果转换成GOsummaries可识别的结构:
library(GOsummaries) library(dplyr) # 定义格式转换函数 format_gost_for_gs <- function(gost_result, group_label) { formatted <- gost_result$result %>% select( term_id = term_id, term_name = name, p_value = p_value, domain = source, group = group_label ) %>% # 匹配GOsummaries的domain命名格式 mutate(domain = case_when( domain == "GO:BP" ~ "biological_process", domain == "GO:MF" ~ "molecular_function", domain == "GO:CC" ~ "cellular_component" )) return(formatted) } # 转换两组结果 formatted_g1 <- format_gost_for_gs(gost_group1, "Traditional") formatted_g2 <- format_gost_for_gs(gost_group2, "EA_pvalue") # 合并结果并创建gosummaries对象 combined_go <- bind_rows(formatted_g1, formatted_g2) gs <- gosummaries(combined_go, group = "group") # 查看或可视化结果 print(gs) plot(gs)
备选方案:网页端导出结果后导入
如果不想写代码转换,可直接在g:Profiler网页端分别分析两组基因,导出TSV格式的富集结果,然后在R中读入并整理成上述格式,再传入gosummaries()。
内容的提问来源于stack exchange,提问作者José Adrián Pardo Pérez
相关产品推荐
相关产品推荐

