玩轉(zhuǎn)單細(xì)胞(7):修改Seurat對(duì)象基因名稱

玩轉(zhuǎn)單細(xì)胞(2):Seurat批量做圖修飾玩轉(zhuǎn)單細(xì)胞(3):堆疊柱狀圖添加比例
玩轉(zhuǎn)單細(xì)胞(4):單細(xì)胞相關(guān)性
玩轉(zhuǎn)單細(xì)胞(5):單細(xì)胞UMAP圖只標(biāo)記特定細(xì)胞群、圈定細(xì)胞群及坐標(biāo)軸修改
玩轉(zhuǎn)單細(xì)胞(6):單細(xì)胞差異基因展示之對(duì)角散點(diǎn)圖
之前的玩轉(zhuǎn)單細(xì)胞系列,還是受到很多人的喜歡的,這里的都是一些小問題,但是遇到的話一時(shí)半會(huì)覺得無從下手,因?yàn)槎际菍懠?xì)枝末節(jié)的問題,學(xué)習(xí)了也是錦上添花。同樣的,今天的問題也是一直以來沒有想過的,只不過是在做項(xiàng)目的時(shí)候需要,查詢了相關(guān)的解決辦法,這里分享驗(yàn)證一下。問題:我們?cè)跇?gòu)建seurat對(duì)象的時(shí)候,使用表達(dá)矩陣,基因名一般是gene symbol,如果是ID的話,網(wǎng)上的教程也是建議轉(zhuǎn)為symbol再構(gòu)建,因?yàn)闃?gòu)建好seurat后無法修改,確實(shí)是,因?yàn)閟eurat沒有專門的函數(shù)進(jìn)行修改。另外就是進(jìn)行同源轉(zhuǎn)化的時(shí)候,只有seurat對(duì)象,那就很難受。 解決辦法:在閱讀一篇文章的時(shí)候作者寫過一個(gè)函數(shù),github上也有:

RenameGenesSeurat <- function(obj = ls.Seurat[[i]], newnames = tmp) { # Replace gene names in different slots of a Seurat object. Run this before integration. Run this before integration. It only changes obj@assays$RNA@counts, @data and @scale.data.
  print("Run this before integration. It only changes obj@assays$RNA@counts and @data ")
  RNA <- obj@assays$RNA

  if (nrow(RNA) == length(newnames)) {
    if (length(RNA@counts)) RNA@counts@Dimnames[[1]]            <- newnames
    if (length(RNA@data)) RNA@data@Dimnames[[1]]                <- newnames
    # if (length(RNA@scale.data)) RNA@scale.data@Dimnames[[1]]    <- newnames
  } else {"Unequal gene sets: nrow(RNA) != nrow(newnames)"}
  obj@assays$RNA <- RNA
  return(obj)
}

但是后來在一個(gè)帖子上發(fā)現(xiàn),作者說github的函數(shù)不是通用形的,且不能全局修改,作者提供了一種改寫函數(shù)。為了尊重勞動(dòng)成果,這里就不直接貼出來函數(shù)了,附上作者函數(shù)的帖子,自行查看:http://www.itdecent.cn/p/6495706bac53這里我們進(jìn)行演示,看看效果,我們用小鼠的seurat對(duì)象進(jìn)行人同源轉(zhuǎn)化:這里也提一種同源轉(zhuǎn)化R包homologene。

library(Seurat)
library(nichenetr)
library(dplyr)
install.packages('homologene')
library(homologene)#基因同源轉(zhuǎn)化R包
# homologene::taxData
#    tax_id                      name_txt
# 1   10090                  Mus musculus
# 2   10116             Rattus norvegicus
# 3   28985          Kluyveromyces lactis
# 4  318829            Magnaporthe oryzae
# 5   33169         Eremothecium gossypii
# 6    3702          Arabidopsis thaliana
# 7    4530                  Oryza sativa
# 8    4896     Schizosaccharomyces pombe
# 9    4932      Saccharomyces cerevisiae
# 10   5141             Neurospora crassa
# 11   6239        Caenorhabditis elegans
# 12   7165             Anopheles gambiae
# 13   7227       Drosophila melanogaster
# 14   7955                   Danio rerio
# 15   8364 Xenopus (Silurana) tropicalis
# 16   9031                 Gallus gallus
# 17   9544                Macaca mulatta
# 18   9598               Pan troglodytes
# 19   9606                  Homo sapiens
# 20   9615        Canis lupus familiaris
# 21   9913                    Bos taurus
# A <- homologene(rownames(mouse_data), inTax = 10090, outTax = 9606)
# inTax輸入物種、outTax輸出物種
#將鼠的基因名轉(zhuǎn)化為人的
mouse_data <- readRDS("D:/mouse_data.rds")
gene_trans = rownames(mouse_data) %>% convert_mouse_to_human_symbols()
gene_trans <- as.data.frame(gene_trans)
gene_mouse <- as.data.frame(rownames(mouse_data))
gene_use <- cbind(gene_trans, gene_mouse)
gene_use <- na.omit(gene_use)
mouse_data_trans <- subset(mouse_data,features=gene_use$`rownames(mouse_data)`)

#轉(zhuǎn)化
mouse_data_trans <- RenameGenesSeurat(mouse_data_trans, 
                                      newnames = gene_use$gene_trans,
                                      gene.use = gene_use$`rownames(mouse_data)`,
                                      de.assay = 'RNA')

轉(zhuǎn)化前:



轉(zhuǎn)化后:



可以看到,轉(zhuǎn)化后不論是哪個(gè)assay,都變成了人的基因。接下來我們做一下差異基因的分析,看看會(huì)不會(huì)出錯(cuò)。發(fā)現(xiàn)沒有任何問題。而且作圖也是一樣的,說明轉(zhuǎn)化的成功。
#測(cè)試一下,差異基因
DEGs <- FindMarkers(mouse_data_trans, 
                    min.pct = 0.25,
                    logfc.threshold = 0.25,
                    group.by = "orig.ident",
                    ident.1 ="10X_ntph_F",
                    ident.2="10X_ntph_M")

DEGs1 <- FindMarkers(mouse_data, 
                    min.pct = 0.25,
                    logfc.threshold = 0.25,
                    group.by = "orig.ident",
                    ident.1 ="10X_ntph_F",
                    ident.2="10X_ntph_M")

p1 <- FeaturePlot(mouse_data_trans, features = 'LTF')
p2 <- FeaturePlot(mouse_data, features = 'Ltf')
p1|p2

最后,我們對(duì)這個(gè)數(shù)據(jù)進(jìn)行重聚類,發(fā)現(xiàn)這個(gè)過程沒有任何問題!


#重聚類
mouse_trans_human <- ScaleData(mouse_data_trans, vars.to.regress = c("nCount_RNA"), verbose = FALSE)
mouse_trans_human <- FindVariableFeatures(mouse_trans_human, nfeatures = 4000)
mouse_trans_human <- RunPCA(mouse_trans_human, npcs = 50, verbose = FALSE)
mouse_trans_human <- FindNeighbors(mouse_trans_human, reduction = "pca", dims = 1:50)
mouse_trans_human <- FindClusters(mouse_trans_human, resolution=0.8)
mouse_trans_human <- RunUMAP(mouse_trans_human, reduction = "pca", dims = 1:50)
DimPlot(mouse_trans_human, label = T,pt.size = 1)

最后,再次感謝這個(gè)提供函數(shù)的作者,這個(gè)函數(shù)特別有用,不僅在需要同源轉(zhuǎn)化的分析中,在跨物種的分析中也同樣適用。覺得分享有用的點(diǎn)個(gè)贊、分享下再走唄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容