clusterprofiler进行enrichGO提示No gene can be mapped

library(tidyverse)
library(clusterProfiler)
de_result <- read.table(
  file = 'flower_sex/genes.counts.matrix.F_vs_M.DESeq2.DE_results',
  header = TRUE) %>% 
  select(id,log2FoldChange,pvalue,padj)
de_result数据如下

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/365042901886149.png "#left")


library(readr)
emapper<- read_delim(
  file = 'D:/geneomes/',
  "\t", escape_double = FALSE, col_names = FALSE,
  comment = "#", trim_ws = TRUE)%>% 
  dplyr::select(GID = X1, 
                Gene_Symbol = X9, 
                GO = X10, 
                KO = X12, 
                Pathway = X13, 
                OG = X7, 
                Gene_Name = X8)


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/690991901886129.png "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/378902901886137.png "#left")


### 候选基因向量(gene)

一个字符型向量,包含感兴趣的基因,如差异表达基因、WGCNA 得到的关键模块里的基因、PCA 中某个PC loadings 高的基因。

```{r}
gene <- filter(de_result, 
               abs(log2FoldChange) > 2 & padj < 0.01) %>%
  pull(id)
### 基因差异向量(geneList)

一个有名向量,记录差异大小,名字为基因ID,值为 logFC,按 logFC 降序排列。

```{r}
geneList <- de_result$log2FoldChange
names(geneList) <- de_result$id
geneList <- sort(geneList, decreasing = T)

# 提取基因信息
gene_info <- dplyr::select(emapper,  GID, Gene_Name) %>%
  dplyr::filter(!is.na(Gene_Name))
# 提取GO信息
gene2go <- dplyr::select(emapper, GID, GO) %>%
  separate_rows(GO, sep = ',', convert = F) %>%
  filter(!is.na(GO)) %>%
  mutate(EVIDENCE = 'IEA'#过滤掉任何不以GO开头的GO
gene2go <- gene2go[grepl("^GO:", as.character(gene2go$GO)),]
# 构建 OrgDB
library(AnnotationForge)
AnnotationForge::makeOrgPackage(gene_info=gene_info,
                                go=gene2go,
                                maintainer='w<w@101214581.com>',
                                author='bank',
                                outputDir="./",
                                tax_id=0000,
                                genus='m',
                                species='y',
                                goTable="go",
                                version="1.0")

# 打包
pkgbuild::build('./org.My.eg.db', dest_path = "./enrich/")

安装自己构建的 OrgDb

# 创建一个文件夹
dir.create('R_Library', recursive = T)

# 将包安装在该文件夹下
install.packages('enrich/org.My.eg.db_1.0.tar.gz', 
                 repos = NULL, #从本地安装
                 lib = 'R_Library') # 安装文件夹

# 加载 OrgDB
library(org.My.eg.db, lib = 'R_Library')

### 富集分析
de_ego <- enrichGO(gene = gene,
                   OrgDb = org.My.eg.db,
                   keyType = 'GID',
                   ont = 'BP',
                   qvalueCutoff = 0.05,
                   pvalueCutoff = 0.05)

**提示:

No gene can be mapped
--> Expected input gene ID: evm.model.Chr6.25133,evm.model.Chr1.961.3.63ebc806,evm.model.Chr5.6899,evm.model.Chr6.1573,evm.model.Chr5.6420,evm.model.Chr3.2040
--> return NULL**

建议第一步检查gene参数和OrgDb数据库中的基因ID格式是否一致,尝试清除gene参数中的空值,然后确认OrgDb中是否包含需要比对的基因信息

引用chatgpt内容作答:
根据你提供的代码和数据,出现"No gene can be mapped"的错误是因为在进行富集分析时,输入的基因ID无法在提供的OrgDB中找到对应的映射。

要解决这个问题,你可以检查以下几个可能的原因:

1、检查基因ID的格式:确保gene向量中的基因ID与OrgDB中的基因ID格式一致。比如,如果OrgDB中使用的是基因名称或Symbol作为基因ID,那么gene向量中的基因ID也应该是相应的格式。

2、检查基因ID的匹配关系:确保gene向量中的基因ID在OrgDB中能够找到对应的映射关系。你可以使用intersect函数来查找gene向量中的基因ID和OrgDB中的基因ID的交集,以确保它们是匹配的。

例如:

common_genes <- intersect(gene, org.My.eg.db::keys(org.My.eg.db, keytype = "GID"))

然后,将common_genes作为输入进行富集分析。

3、检查OrgDB的构建和安装:确保你正确地构建了OrgDB,并且将其正确地安装到了R环境中。你可以检查构建OrgDB的代码和路径,以及使用install.packages函数安装OrgDB的路径是否正确。

富集分析的结果取决于所使用的数据库和注释信息的质量和完整性。

clusterProfiler等相关分析包已经修改了

可以自己到bioconductor看下最新的安装命令,把包更新下,或者重新安装。

在线安装

devtools::install_github("YuLab-SMU/DOSE")
devtools::install_github("YuLab-SMU/HDO.db")
devtools::install_github('YuLab-SMU/clusterProfiler')

因为这些包环环相扣,互相依赖,最好包都更新。

如果出现以下提示,请输入1,让他全部更新

Enter one or more numbers, or an empty line to skip updates:

来自GPT的回答:


根据你提供的代码和报错信息,看起来问题出在基因ID的匹配上。enrichGO函数中的gene参数需要提供正确的基因ID,以便与OrgDb中的基因信息进行匹配。

根据你的代码,你的基因ID保存在de_result数据框中的id列。首先,确保id列中的基因ID与OrgDb中的基因ID匹配。然后,尝试将基因ID转换为正确的格式,以与OrgDb中的基因ID进行匹配。

你可以尝试以下步骤来解决问题:

确认de_result数据框中的基因ID格式是否与OrgDb中的基因ID格式一致。检查是否有前缀或后缀不匹配的情况。如果有差异,需要对基因ID进行相应的处理。

使用select()函数选择de_result数据框中的基因ID列,并使用pull()函数提取基因ID向量。

R
Copy code
gene <- de_result$id
对基因ID向量进行适当的格式转换,以确保与OrgDb中的基因ID格式匹配。

使用转换后的基因ID向量作为gene参数来运行enrichGO函数。

R
Copy code
de_ego <- enrichGO(gene = gene,
                   OrgDb = org.My.eg.db,
                   keyType = 'GID',
                   ont = 'BP',
                   qvalueCutoff = 0.05,
                   pvalueCutoff = 0.05)
这样做应该能解决报错提示中的"No gene can be mapped"问题。如果问题仍然存在,请确保基因ID与OrgDb中的基因ID完全匹配,并确保你的OrgDb中包含所需的基因信息。

此外,确保你已正确安装clusterProfiler和相关依赖包,并加载了所需的库。