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数据如下

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)


### 候选基因向量(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和相关依赖包,并加载了所需的库。