Skip to content

Commit

Permalink
reorg singlecell
Browse files Browse the repository at this point in the history
  • Loading branch information
lpantano committed Jul 25, 2024
1 parent 9b83b1f commit 57f4545
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 108 deletions.
10 changes: 7 additions & 3 deletions inst/templates/singlecell/README.md
Original file line number Diff line number Diff line change
@@ -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`
Expand All @@ -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.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Tipical steps for scRNAseq downstream analysis
---
title: "From raw data to Seurat"
---
Expand Down Expand Up @@ -272,83 +273,3 @@ seurat_merge[["RNA"]] <- JoinLayers(seurat_merge[["RNA"]])
saveRDS(seurat_merge, file = "seurat_pre-filtered.rds")
write.csv([email protected], 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 <- [email protected]$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([email protected]))) {
rownames(metafull) <- metafull$barcode
[email protected] <- 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([email protected], file = "metadata_pre-filtered.csv")
```
73 changes: 73 additions & 0 deletions inst/templates/singlecell/scripts/seurat_init.R
Original file line number Diff line number Diff line change
@@ -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")
25 changes: 0 additions & 25 deletions inst/templates/singlecell/skeleton.Rmd

This file was deleted.

0 comments on commit 57f4545

Please sign in to comment.