-
Notifications
You must be signed in to change notification settings - Fork 0
6_Interopability between single cell objects
Olivia Waltner edited this page Apr 5, 2023
·
1 revision
It's to your advantage to use as many functions offered by monocle, seurat, archR, etc etc for your analysis. To the basic user, converting between objects is not intuitive.
monocle to seurat function
monocle3_to_seurat <-function(cds, seu_rd="umap", mon_rd="UMAP", assay_name="RNA", row.names="gene_short_name", normalize=T){
warning("this function will create a Seurat object with only 1 reduced dimension; currently only UMAP is supported")
counts <- exprs(cds)
rownames(counts) <- rowData(cds)[[row.names]]
seu<-CreateSeuratObject(counts, meta.data = data.frame(colData(cds)))
keyname<-paste0(seu_rd, "_")
colnames(reducedDims(cds)[[mon_rd]])<-paste0(keyname, 1:dim(reducedDims(cds)[[mon_rd]])[2])
seu@reductions[[seu_rd]]<-Seurat::CreateDimReducObject(embeddings = reducedDims(cds)[[mon_rd]], key = keyname, assay = assay_name, )
if(normalize){seu<-NormalizeData(seu)}
seu
}
usage
seu<-monocle3_to_seurat(cds)
DefaultAssay(seu) <- 'RNA'
seu <- FindVariableFeatures(seu) %>%
ScaleData() %>%
RunPCA()
#no need to RunUMAP!!!
seurat to monocle object
seurat_to_monocle3 <-function(seu, seu_rd="umap", mon_rd="UMAP", assay_name="RNA"){
cds<-new_cell_data_set(seu@assays[[assay_name]]@counts,
cell_metadata = seu@meta.data,
gene_metadata = DataFrame(
row.names = rownames(seu@assays[[assay_name]]@counts),
id=rownames(seu@assays[[assay_name]]@counts),
gene_short_name=rownames(seu@assays[[assay_name]]@counts)))
reducedDims(cds)[[mon_rd]]<-seu@reductions[[seu_rd]]@cell.embeddings
cds
}
usage
#exporting SCT data from seurat
cds<-seurat_to_monocle3(seu, seu_rd = "SCT_UMAP", assay_name = "SCT)
#default parameters export RNA data
cds<-seurat_to_monocle3(seu)
ArchR to Seurat
archr_to_seurat<-function (proj, matrix, binarize, archr_rd)
{
se <- getMatrixFromProject(proj, useMatrix = matrix, binarize = binarize)
mat <- se@assays@data@listData[[matrix]]
feature_df <- se@elementMetadata %>% as.data.frame()
if (matrix == "GeneScoreMatrix" | matrix == "GeneExpressionMatrix" |
matrix == "MotifMatrix") {
rn <- feature_df$name
}
if (matrix == "TileMatrix") {
rn <- paste0(feature_df[, 1], "-", feature_df[, 2], "-",
feature_df[, 3])
}
if (matrix == "PeakMatrix") {
feature_df <- se@rowRanges %>% as.data.frame()
rn <- paste0(feature_df[, 1], "-", feature_df[, 2], "-",
feature_df[, 3])
}
rownames(mat) <- rn
colnames(mat) <- colnames(se)
meta <- se@colData %>% as.data.frame()
rownames(meta) <- colnames(mat)
seu <- CreateSeuratObject(mat, project = matrix, assay = matrix,
meta.data = meta)
keyname <- paste0(archr_rd, "_")
umap_df <- proj@embeddings@listData[[archr_rd]]@listData[["df"]] %>%
as.matrix()
colnames(umap_df) <- paste0(keyname, 1:2)
seu@reductions[[archr_rd]] <- Seurat::CreateDimReducObject(embeddings = umap_df,
key = keyname, assay = matrix)
seu
}
usage
seu<-archr_to_seurat(archr, matrix = "GeneScoreMatrix", archr_rd = "LSI_UMAP", binarize = F)