[fb5156]: / src / SeuratToH5ad.R

Download this file

83 lines (72 with data), 2.4 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
71
72
73
74
75
76
77
78
79
80
81
82
83
SeuratToH5ad <- function(seurat_object, filename, assay = NULL, res = 1) {
library(reticulate)
if (!py_module_available("anndata") | !py_module_available("scanpy") | !py_module_available("igraph") | !py_module_available("louvain")) {
stop("Please install the anndata python module")
}
ad <- import("anndata")
sc <- import("scanpy")
message(paste("Starting to fix the mess..."))
raw <- seurat_object@assays$RNA@data
if (assay == "RNA") {
X <- seurat_object@assays$RNA@scale.data
} else if (assay == "SCT") {
X <- seurat_object@assays$SCT@scale.data
} else {
stop("Please select an existent assay")
}
cell_names <- colnames(x = X)
gene_names <- rownames(x = X)
raw <- as(object = raw, Class = "dgCMatrix")
scipy <- import(module = 'scipy.sparse', convert = FALSE)
sp_sparse_csc <- scipy$csc_matrix
raw.rownames <- rownames(x = raw)
raw <- sp_sparse_csc(
tuple(np_array(raw@x), np_array(raw@i), np_array(raw@p)),
shape = tuple(raw@Dim[1], raw@Dim[2])
)
raw <- raw$T
raw <- dict(X = raw, var = dict(var_names = raw.rownames))
X <- np_array(t(x = X))
obsm <- list()
for (dr in names(seurat_object@reductions)) {
obsm[[paste0("X_",dr)]] <- np_array(Embeddings(
object = seurat_object,
reduction = dr
))
}
obsm <- dict(obsm)
meta_data <- seurat_object@meta.data
if ("nCount_RNA" %in% colnames(x = meta_data)) {
colnames(x = meta_data) <- gsub(
pattern = "nCount_RNA",
replacement = "n_counts",
x = colnames(x = meta_data)
)
}
if ("nFeature_RNA" %in% colnames(x = meta_data)) {
colnames(x = meta_data) <- gsub(
pattern = "nFeature_RNA",
replacement = "n_genes",
x = colnames(x = meta_data)
)
}
colnames(x = meta_data) <- gsub(
pattern = "\\.",
replacement = "_",
x = colnames(x = meta_data)
)
anndata.object <- ad$AnnData(
raw = raw,
X = X,
obs = meta_data,
obsm = obsm
)
anndata.object$var_names <- gene_names
anndata.object$obs_names <- cell_names
#message(paste("Clustering for resolution:", res))
#sc$pp$neighbors(anndata.object)
#sc$tl$louvain(anndata.object, resolution=res, key_added = paste0("res", res))
message(paste("Writing to h5ad file..."))
anndata.object$write(filename)
message(paste("Finished!!"))
}