R - 使用 biomaRt/getBM 生成一个包含 55,000 多个基因的列表,而不是我在 "values" 下作为数据框输入的 ~15,000 个

R - Using biomaRt/getBM generates a list of 55,000+ genes instead of the ~15,000 I'm inputting as a data frame under "values"

我已经从 NIH GEO 下载了一个广泛的数据集,并且正在尝试将第一列中的 Ensembl 名称转换为 MGI 符号

我命名为SOD的table如下图

SOD Data - Total rows = 15,396

我使用了以下代码:

setwd("C:/R/Project")
if (!requireNamespace("BiocManager", quietly = TRUE))
  install.packages("BiocManager")
BiocManager::install("biomaRt", version = "3.8")
library(BiocManager)
library(biomaRt)
SOD<-read.csv("Static Organoid Data.csv")
names_only<-data.frame(SOD[,1])
mart <- useMart(biomart = "ensembl", dataset = "mmusculus_gene_ensembl")
Gene_list <- getBM(attributes = c("ensembl_gene_id", "mgi_symbol"),
                   values     = names_only, 
                   mart       = mart)
View(Gene_list)

这会输出超过 55,000 行的集成和 MGI 符号列表。

我尝试将 filter = "ensembl_gene_id 添加到 getBM 函数中,但输出有 0 行和 0 列。

我做错了什么?

您的集成 ID 是版本化的,这意味着它们具有 .# 的形式,而 biomart 中的集成 ID 则没有。要解决此问题,您需要删除名称末尾的 .#,如下所示:

names_only <- gsub("\.*","",data.frame(SOD[,1]))
mart <- useMart(biomart = "ensembl", dataset = "mmusculus_gene_ensembl")
Gene_list <- getBM(attributes = c("ensembl_gene_id", "mgi_symbol"),
                   values     = names_only,
                   filter     = "ensembl_gene_id",
                   mart       = mart)