diff --git a/inst/templates/singlecell/README.md b/inst/templates/singlecell/README.md index 0a6a5b2..c698f79 100644 --- a/inst/templates/singlecell/README.md +++ b/inst/templates/singlecell/README.md @@ -1,6 +1,10 @@ -# Tipical steps for scRNAseq downstream analysis +# Project name -# DropBox +## Start with cell-ranger + +`pre-process-w-cellranger.md` contains step by step guidelines on how to run cellranger in O2 and load data into R. This `scripts/seurat_init.R` script contains all the pieces to go from cellranger output to Seurat obj. It is assuming a mouse genome. + +## DropBox - In `reports/QC` - [ ] copy QC `Rmd/R/html/figures` @@ -10,7 +14,7 @@ - In `reports/DE`, for *each analysis*: - TBD -# GitHub +## GitHub - [ ] Push all `*Rmd` `*R` files used for the *QC* and *DE* analysis respecting folder structure. diff --git a/inst/templates/singlecell/starting_steps.md b/inst/templates/singlecell/pre-process-w-cellranger.md similarity index 77% rename from inst/templates/singlecell/starting_steps.md rename to inst/templates/singlecell/pre-process-w-cellranger.md index 1e10850..05a57e4 100644 --- a/inst/templates/singlecell/starting_steps.md +++ b/inst/templates/singlecell/pre-process-w-cellranger.md @@ -1,3 +1,4 @@ +# Tipical steps for scRNAseq downstream analysis --- title: "From raw data to Seurat" --- @@ -272,83 +273,3 @@ seurat_merge[["RNA"]] <- JoinLayers(seurat_merge[["RNA"]]) saveRDS(seurat_merge, file = "seurat_pre-filtered.rds") write.csv(seurat_merge@meta.data, file = "metadata_pre-filtered.csv") ``` - -## Full script - -Below find all pieces to copy and paste. We are assuming a mouse genome. - -``` - -library(Seurat) -library(data.table) -library(hdf5r) - -### Set up run information -data_dir <- "/path/to/cellranger/output/folders/" - -samples <- c("sample1", "sample2", "sample3") - -### Make individual seurat objects for each sample - -for (i in 1:length(samples)){ - seurat_data <- Read10X_h5(paste(c(data_dir,samples[i],"/outs/raw_feature_bc_matrix.h5"),sep="",collapse = "")) - seurat_obj <- CreateSeuratObject(counts = seurat_data, - min.features = 100, ## only keep cells with at least 100 genes - project = samples[i]) - assign(paste0(samples[i], "_seurat"), - seurat_obj) # stores Seurat object in variable of corresponding sample name -} - -### Merge all seurat objects - -seurat_ID <- paste0(samples, "_seurat") # get names of all objects - - -u <- get(seurat_ID[2]) -for (i in 3:length(seurat_ID)) { - u <- c(u, get(seurat_ID[i])) -} ## makes a list of all seurat objects - -seurat_merge <- merge(x = get(seurat_ID[1]), - y = u, - add.cell.ids = all_samples, - project = "my_scRNA_project") - - -# Mitochondrial genes for mouse genome -idx <- grep("^mt-", rownames(GetAssay(seurat_merge, "RNA"))) -rownames(GetAssay(seurat_merge, "RNA"))[idx] -# Mitochondrial genes vs. nuclear genes ratio -seurat_merge$mitoRatio <- PercentageFeatureSet(object = seurat_merge, pattern = "^mt-") -seurat_merge$mitoRatio <- seurat_merge@meta.data$mitoRatio/100 # Divide by 100 for Ratio instead of Percentage - -# Number of genes per UMI for each cell -seurat_merge$Log10GenesPerUMI <- log10(seurat_merge$nFeature_RNA) / log10(seurat_merge$nCount_RNA) - -# Import experimental metadata -metaexp <- read.csv("/path/to/experimental/metadata/meta.csv") - -# Check matching of IDs -all(metaexp$sample %in% metadata$orig.ident) -all(metadata$orig.ident %in% metaexp$sample) - -#change headings to match -colnames(metaexp)[1] <- "orig.ident" - -metafull <- plyr::join(metadata, metaexp, - by = c("orig.ident")) - -# Replace seurat object metadata -if(all(metafull$barcode == rownames(seurat_merge@meta.data))) { - rownames(metafull) <- metafull$barcode - seurat_merge@meta.data <- metafull -} - - -## Join layers (each sample is a separate layer) -seurat_merge[["RNA"]] <- JoinLayers(seurat_merge[["RNA"]]) - -### Save Seurat object for future processing -saveRDS(seurat_merge, file = "seurat_pre-filtered.rds") -write.csv(seurat_merge@meta.data, file = "metadata_pre-filtered.csv") -``` \ No newline at end of file diff --git a/inst/templates/singlecell/scripts/seurat_init.R b/inst/templates/singlecell/scripts/seurat_init.R new file mode 100644 index 0000000..d345556 --- /dev/null +++ b/inst/templates/singlecell/scripts/seurat_init.R @@ -0,0 +1,73 @@ + +library(Seurat) +library(data.table) +library(hdf5r) + +### Set up run information +data_dir <- "/path/to/cellranger/output/folders/" + +samples <- c("sample1", "sample2", "sample3") + +### Make individual seurat objects for each sample + +for (i in 1:length(samples)){ + seurat_data <- Read10X_h5(paste(c(data_dir,samples[i],"/outs/raw_feature_bc_matrix.h5"),sep="",collapse = "")) + seurat_obj <- CreateSeuratObject(counts = seurat_data, + min.features = 100, ## only keep cells with at least 100 genes + project = samples[i]) + assign(paste0(samples[i], "_seurat"), + seurat_obj) # stores Seurat object in variable of corresponding sample name +} + +### Merge all seurat objects + +seurat_ID <- paste0(samples, "_seurat") # get names of all objects + + +u <- get(seurat_ID[2]) +for (i in 3:length(seurat_ID)) { + u <- c(u, get(seurat_ID[i])) +} ## makes a list of all seurat objects + +seurat_merge <- merge(x = get(seurat_ID[1]), + y = u, + add.cell.ids = all_samples, + project = "my_scRNA_project") + + +# Mitochondrial genes for mouse genome +idx <- grep("^mt-", rownames(GetAssay(seurat_merge, "RNA"))) +rownames(GetAssay(seurat_merge, "RNA"))[idx] +# Mitochondrial genes vs. nuclear genes ratio +seurat_merge$mitoRatio <- PercentageFeatureSet(object = seurat_merge, pattern = "^mt-") +seurat_merge$mitoRatio <- seurat_merge@meta.data$mitoRatio/100 # Divide by 100 for Ratio instead of Percentage + +# Number of genes per UMI for each cell +seurat_merge$Log10GenesPerUMI <- log10(seurat_merge$nFeature_RNA) / log10(seurat_merge$nCount_RNA) + +# Import experimental metadata +metaexp <- read.csv("/path/to/experimental/metadata/meta.csv") + +# Check matching of IDs +all(metaexp$sample %in% metadata$orig.ident) +all(metadata$orig.ident %in% metaexp$sample) + +#change headings to match +colnames(metaexp)[1] <- "orig.ident" + +metafull <- plyr::join(metadata, metaexp, + by = c("orig.ident")) + +# Replace seurat object metadata +if(all(metafull$barcode == rownames(seurat_merge@meta.data))) { + rownames(metafull) <- metafull$barcode + seurat_merge@meta.data <- metafull +} + + +## Join layers (each sample is a separate layer) +seurat_merge[["RNA"]] <- JoinLayers(seurat_merge[["RNA"]]) + +### Save Seurat object for future processing +saveRDS(seurat_merge, file = "seurat_pre-filtered.rds") +write.csv(seurat_merge@meta.data, file = "metadata_pre-filtered.csv") diff --git a/inst/templates/singlecell/skeleton.Rmd b/inst/templates/singlecell/skeleton.Rmd deleted file mode 100644 index dc4bbf5..0000000 --- a/inst/templates/singlecell/skeleton.Rmd +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: "General Project Information" -author: "Harvard Chan Bioinformatics Core" -date: "`r Sys.Date()`" -output: - html_document: - code_folding: hide - df_print: paged - highlights: pygments - number_sections: true - self_contained: true - theme: default - toc: true - toc_float: - collapsed: true - smooth_scroll: true -editor_options: - chunk_output_type: console -params: - params_file: information.R ---- - -```{r echo = F} -source(params$params_file) -```