1- if (length(seuratObjects ) == 1 ) {
2- print(' There is only one seurat object, no need to merge' )
3- datasetId <- names(seuratObjects )[[1 ]]
4- saveData(seuratObjects [[datasetId ]], datasetId )
5- } else {
1+ doDiet <- exists(' doDiet' ) && doDiet
2+
3+ mergeBatch <- function (dat ) {
64 toMerge <- list ()
7- for (datasetId in names(seuratObjects )) {
8- doDiet <- exists(' doDiet' ) && doDiet
9- if (exists(' doDiet' ) && doDiet ) {
10- print(' Running DietSeurat on inputs' )
11- toMerge [[datasetId ]] <- Seurat :: DietSeurat(readRDS(seuratObjects [[datasetId ]]))
5+ for (datasetId in names(dat )) {
6+ message(paste0(' Loading: ' , datasetId ))
7+ if (doDiet ) {
8+ toMerge [[datasetId ]] <- Seurat :: DietSeurat(readRDS(dat [[datasetId ]]))
129 gc()
1310 } else {
14- toMerge [[datasetId ]] <- readRDS(seuratObjects [[datasetId ]])
11+ toMerge [[datasetId ]] <- readRDS(dat [[datasetId ]])
1512 }
1613 }
1714
1815 seuratObj <- CellMembrane :: MergeSeuratObjs(toMerge , projectName = projectName , doGC = doDiet , errorOnBarcodeSuffix = errorOnBarcodeSuffix )
19- rm(toMerge )
20- saveData(seuratObj , projectName )
16+ return (seuratObj )
2117}
2218
23- # Cleanup
24- rm(seuratObjects )
25- gc()
19+ if (length(seuratObjects ) == 1 ) {
20+ print(' There is only one seurat object, no need to merge' )
21+ datasetId <- names(seuratObjects )[[1 ]]
22+ saveData(seuratObjects [[datasetId ]], datasetId )
23+ } else {
24+ batchSize <- 20
25+ numBatches <- ceiling(length(seuratObjects ) / batchSize )
26+ mergedObjects <- list ()
27+ for (i in 1 : numBatches ) {
28+ message(paste0(' Merging batch ' , i , ' of ' , numBatches ))
29+ start <- 1 + (i - 1 )* batchSize
30+ end <- min(start + batchSize - 1 , length(seuratObjects ))
31+ message(paste0(' processing: ' , start , ' to ' , end , ' of ' , length(seuratObjects )))
32+
33+ mergedObjects [[i ]] <- mergeBatch(seuratObjects [start : end ])
34+ gc()
35+ }
36+
37+ message(' Done with batches' )
38+ if (length(mergedObjects ) == 1 ) {
39+ seuratObj <- mergedObjects [[1 ]]
40+ } else {
41+ message(' performing final merge' )
42+ seuratObj <- merge(x = mergedObjects [[1 ]], y = mergedObjects [2 : length(mergedObjects )], project = mergedObjects [[1 ]]@ project.name )
43+ }
44+
45+ rm(mergedObjects )
46+ gc()
47+
48+ saveData(seuratObj , projectName )
49+ }
0 commit comments