物种间基因互换

近期碰到一个很奇怪的需要,希望将单细胞矩阵里小鼠的基因转换为human的基因。

经过追问是因为想做scMetabolism分析,而这个方法中给出的gmt文件都是human的,其实我的第一想法是应该去把gmt的改成小鼠对应的,不过这个显然对方无法自己做到,而且还涉及到修改函数源码的问题,因此,只能将seuratobject里的小鼠的symbol改成human的。

有两种方案,其一是超级偷懒版。由于小鼠和human同源的基因本质上只是大小写不一样,那么我们可以直接将小鼠的基因列表使用upper函数直接全转成大写就当完成。

第二种,利用ensembl来转换,这个教程很多,但是网络访问问题嘛…….

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
library(biomaRt)
human <- useMart("ensembl",dataset="hsapiens_gene_ensembl")
mouse <- useMart("ensembl",dataset="mmusculus_gene_ensembl")

#将小鼠基因转成人的基因:

geneMn <- rownames(mtx)
geneHs <- getLDS(attributes = "mgi_symbol",
    filters="mgi_symbol",
    values= geneMn,
    mart=mouse,
    attributesL = "hgnc_symbol",
    martL=human,
    uniqueRows = TRUE)
geneHs

反正我自己是没跑出来,不是404就是502…….

第三种,使用homologene这个R包,这种最简单,而且这个包针对human和mouse还专门写了一个函数mouse2human

1
2
3
4
library(homologene)
#inTax是输入的基因列表所属的物种号,10090是小鼠
#outTax是要转换成的物种号,9606是人
homologene(genelist, inTax = 10090, outTax = 9606)

这样就太简单了,当然,转换完之后得传回seuratobject里,一共有三个地方需要改动,两个dimnames和一个var.features(高变基因列表)

1
2
seuratobject@assays$RNA@data@Dimnames[[1]] <- genes_trans
seuratobject@assays$RNA@counts@Dimnames[[1]] <- genes_trans