文件名:Annotation.R
#’ @description:
#’ 两个参数
#’ species: 物种目前只有两种 人(Human)、鼠(Mouse)
#’ scRNA: 聚类后的Seurat对象
#’ 还可以再增加一个参数,选择是初次注释 还是再聚类之后对免疫细胞的注释
AnnoBySingleR <- function(species,scRNA){
# 参考数据
if(species == "Human"){
refData <- celldex::HumanPrimaryCellAtlasData() # 人类细胞图谱数据
}else if(species == "Mouse"){
refData <- celldex::MouseRNAseqData() # 小鼠细胞图谱数据
}
# 表达数据
testData <- GetAssayData(scRNA, slot = 'data') # normalize之后的数据
# 聚类数据
clusters <- scRNA@meta.data$seurat_clusters
# 自动注释
cellPred <- SingleR(test = testData,
ref = refData,
clusters = clusters,
labels = refData$label.main,
assay.type.test = "logcounts",
assay.type.ref = "logcounts")
# 自动注释细胞类型
cellType <- data.frame(clusterID = rownames(cellPred),
cellType = cellPred$labels,
stringsAsFactors = F)
# 自动注释结果添加到注释信息
scRNA@meta.data$cellTypeSingleR <- "NA"
for(i in 1:nrow(scRNA@meta.data)){
scRNA@meta.data$cellTypeSingleR[i] <- cellType[which(scRNA@meta.data$seurat_clusters[i] == cellType$clusterID),"cellType"]
}
# return(cellType,scRNA) 报错 R语言只能返回一个对象
# 可以将多个对象存放在一个列表中一起返回
return(scRNA)
}