org.Hs.eg.db R包的主要用途
org.Hs.eg.db — Organism Homo sapiens Entrez Gene database
用途:提供人类基因的各种注释信息,主要基于 Entrez Gene ID(NCBI 提供的基因编号系统)。
数据来源:整合自多个数据库,包括:
NCBI(Entrez Gene)
Ensembl
UCSC
UniProt
GO(Gene Ontology)
KEGG
HGNC(HUGO Gene Nomenclature Committee)
OMIM 等
以通过它获取一个基因的:
注释内容
SYMBOL 基因符号(如 TP53)
ENTREZID Entrez 基因编号(如 7157)
GENENAME 基因名称(如 tumor protein p53)
ENSEMBL Ensembl 基因 ID(如 ENSG00000141510)
REFSEQ RefSeq 编号
UNIPROT UniProt 蛋白编号
GO Gene Ontology 注释(BP/CC/MF)
KEGG 关联的 KEGG 通路信息
OMIM 遗传疾病关联信息
一般用途如下,主要是用于对基因或蛋白的通用的注释。
DEG_entrezid = mapIds(x = org.Hs.eg.db,
keys = diffrent_DEGs1,
keytype = "SYMBOL",
column = "ENTREZID") #存在NA
table(is.na(DEG_entrezid))
DEG_entrezid <- na.omit(DEG_entrezid)
GO_BP = enrichGO(gene = DEG_entrezid,
OrgDb = org.Hs.eg.db,
keyType = "ENTREZID",
ont = "BP", #'BP','CC','MF'
pvalueCutoff = 0.05,
qvalueCutoff = 0.05)
如何查看某个基因富集在不同数据库中的什么通路?
数据库 通路类别 支持方式 R 包或平台 | |
GO BP/CC/MF ✅ org.Hs.eg.db + GO.db | |
KEGG Pathway ✅ clusterProfiler::enrichKEGG 或 KEGGREST | |
Reactome Pathway ✅ ReactomePA | |
WikiPathways Pathway ✅ rWikiPathways | |
MSigDB 各类集合 ✅ msigdbr | |
BioCarta Pathway ✅(已合入 MSigDB) msigdbr |
感兴趣的某个基因被注释到什么通路了?(前5个数据库)
# 安装并加载
if (!require("ReactomePA")) BiocManager::install("ReactomePA")
if (!require("org.Mm.eg.db")) BiocManager::install("org.Mm.eg.db") # 小鼠数据库
library(ReactomePA)
library(org.Mm.eg.db)
# SYMBOL → ENTREZID
genes <- c("#")
entrez_ids <- mapIds(org.Hs.eg.db,
keys = genes,
column = "ENTREZID",
keytype = "SYMBOL",
multiVals = "first")###存在一对多的注释时,只选取第一个注释
entrez_ids
# 提取 GO 注释
go_annot <- select(org.Hs.eg.db,
keys = entrez_ids,
columns = c("GO", "ONTOLOGY"),
keytype = "ENTREZID")
# 加 GO 名称
go_annot$TERM <- Term(go_annot$GO)
# 只要 BP(生物过程)
go_bp <- subset(go_annot, ONTOLOGY == "BP")
library(KEGGREST)
kegg_paths <- lapply(entrez_ids, function(id) {
keggLink("pathway", paste0("hsa:", id))
})
names(kegg_paths) <- names(entrez_ids)
kegg_paths
kegg_ids <- sub("path:", "", unique(unlist(kegg_paths)))
# 用 tryCatch 安全获取 KEGG 通路名称
get_kegg_info <- function(pid) {
tryCatch({
info <- keggGet(pid)[[1]]
data.frame(pathway_id = pid,
pathway_name = info$NAME,
stringsAsFactors = FALSE)
}, error = function(e) {
# 如果报错,则返回 NA 行
data.frame(pathway_id = pid,
pathway_name = NA_character_,
stringsAsFactors = FALSE)
})
}
# 应用到所有通路 ID
kegg_df_list <- lapply(kegg_ids, get_kegg_info)
kegg_df <- do.call(rbind, kegg_df_list)
# 加上基因信息
gene_name <- names(kegg_paths)[1]
kegg_df$gene <- gene_name
# 调整列顺序
kegg_df <- kegg_df[, c("gene", "pathway_id", "pathway_name")]
# 查看结果
print(kegg_df)
library(ReactomePA)
# 查询 Reactome 通路
reactome_pathways <- lapply(entrez_ids, function(id) {
tryCatch({
reactome <- ReactomePA::pathway2geneReactome[ReactomePA::pathway2geneReactome$gene_id == id, ]
merge(reactome, ReactomePA::reactomePATHID2NAME, by = "pathway_id")
}, error = function(e) NULL)
})
names(reactome_pathways) <- names(entrez_ids)
###D 和H 在 Reactome 没有通路注释
library("rWikiPathways")
Sys.setenv(http_proxy = "http://127.0.0.1:#####") ##科学上网提供的IP
Sys.setenv(https_proxy = "http://127.0.0.1:#####")
# 返回 WikiPathways 中该基因的所有通路
wikipathways_annots <- lapply(entrez_ids, function(id) {
rWikiPathways::findPathwaysByXref(system = "L", id = id)
})
names(wikipathways_annots) <- names(entrez_ids)
# 合并成数据框,添加 gene 字段
wikipathways_df <- do.call(rbind, lapply(names(wikipathways_annots), function(gene) {
pathways <- wikipathways_annots[[gene]]
if (is.null(pathways) || nrow(pathways) == 0) {
# 没查到通路,保留一行 NA
data.frame(gene = gene,
pathwayId = NA,
name = NA,
url = NA,
stringsAsFactors = FALSE)
} else {
# 查到通路,加上 gene 名
cbind(gene = gene, pathways[, c("id", "name", "url")])
}
}))
# 重命名列名(可选)
colnames(wikipathways_df) <- c("gene", "pathway_id", "pathway_name", "pathway_url")
# 查看结果
print(wikipathways_df)
library(msigdbr)
# 所有 MSigDB 集合
msig <- msigdbr(species = "Homo sapiens")
msigdb <- msig %>%
filter(gene_symbol == "##")
print(msigdb[, c("gs_cat", "gs_subcat", "gs_name")])
msigdb_df <- as.data.frame(msigdb[, c("gs_cat", "gs_subcat", "gs_name")])
#把不同数据库的注释合并到一个数据框后输出为csv文件。
# 统一列名处理(添加 source 列,标记数据来源)
wikipathways_df$source <- "WikiPathways"
kegg_df$source <- "KEGG"
go_bp$source <- "GO"
msigdb_df$source <- "MSigDB"
# 转换 GO 数据框列名一致性(可选)
colnames(go_bp)[colnames(go_bp) == "ENTREZID"] <- "gene"
# 获取所有列名集合
all_cols <- unique(unlist(lapply(list(wikipathways_df, kegg_df, go_bp, msigdb_df), colnames)))
# 保证每个数据框都具有相同的列结构
pad_df <- function(df, all_cols) {
for (col in setdiff(all_cols, colnames(df))) {
df[[col]] <- NA
}
df[, all_cols]
}
# 填补缺失列
wikipathways_df <- pad_df(wikipathways_df, all_cols)
kegg_df <- pad_df(kegg_df, all_cols)
go_bp <- pad_df(go_bp, all_cols)
msigdb_df <- pad_df(msigdb_df, all_cols)
# 空行数据框
blank_row <- as.data.frame(matrix(NA, nrow = 1, ncol = length(all_cols)))
colnames(blank_row) <- all_cols
# 合并并插入空行分隔
combined_df <- rbind(
wikipathways_df,
blank_row,
kegg_df,
blank_row,
go_bp,
blank_row,
msigdb_df
)
# 写出为 CSV 文件
write.csv(combined_df, "combined_pathway_annotations.csv", row.names = FALSE)