-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcellchat.R
More file actions
70 lines (63 loc) · 2.74 KB
/
cellchat.R
File metadata and controls
70 lines (63 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
library(CellChat)
library(patchwork)
library(Seurat)
data.dir <- '13-cellchat'
dir.create(data.dir)
setwd(data.dir)
sce <- readRDS("../3-auto_annotate/sce.clean.rds")
meta2 <- read.delim("../../../meta.txt")
meta2 <- meta2[meta2$class1 == "scRNA",]
meta2$group <- meta2$group1
group1 <- unique(meta2$group)
load("../4-subtype2/finaltype/sce_meta.Rdata")
library(future)
options(future.seed = TRUE)
options(future.globals.maxSize = 10 * 1024^3) # 2GB
plan("multisession", workers = 4) # 并行处理
a <- sum(rownames(sce_meta) != rownames(sce@meta.data))
if (a > 0){
print("something was wrong")
}
meta <- sce_meta
meta <- meta %>% dplyr::select(orig.ident,celltype)
#meta3 <- meta %>% left_join(meta2, by = c("orig.ident" = "id"))
meta$group <- meta2$group[match(meta$orig.ident,meta2$id)]
chat1 <- c("celltype2","celltype3")
for (j in chat1[c(2)]) {
unlink(j,recursive = T)
dir.create(j)
setwd(j)
z <- match(rownames(meta),rownames(sce@meta.data))
length(unique(z))
sce$celltype2 <- sce$celltype
sce$celltype2[match(rownames(sce_meta),rownames(sce@meta.data))] <- sce_meta[,j]
for (i in group1) {
cell.use = rownames(meta)[meta$group == i] #
# B. 为 CelChat 分析子集输入数据
sce.use <- sce[,cell.use]
sce.use <- sce.use[,sce.use$celltype2 != "contamination"]
sce.use$samples <- as.factor(sce.use$sample)
cellchat <- createCellChat(object = sce.use, group.by = "celltype2",assay = "RNA") #从seruat对象直接构建更方便。
#每组数据需独立运行以下步骤:
#(1) 配体-受体数据库预处理
CellChatDB <- CellChatDB.human# 如果分析小鼠数据,请使用 CellChatDB.mouse
showDatabaseCategory(CellChatDB)
#CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling", key = "annotation")# 使用分泌信号
cellchat@DB <- CellChatDB
#(2) 计算细胞通讯概率
# 使用 CellChatDB 的一个子集进行细胞间通讯分析
cellchat <- subsetData(cellchat) # 过滤低表达基因
cellchat <- identifyOverExpressedGenes(cellchat)
cellchat <- identifyOverExpressedInteractions(cellchat)
cellchat <- computeCommunProb(cellchat, type = "triMean")# 计算通讯概率
#(3) 整合通路并过滤
cellchat <- filterCommunication(cellchat, min.cells = 10)
#用户可以过滤掉某些细胞群中细胞数量较少的细胞间通讯。默认情况下,每个细胞群中用于细胞间通讯的最小细胞数量为 10。
####在信号通路水平推断细胞间通讯####
cellchat <- computeCommunProbPathway(cellchat)
#计算聚合的细胞间通讯网络
cellchat <- aggregateNet(cellchat)
saveRDS(cellchat, file = paste0(i,".rds"))
}
setwd("../")
}