# calculateQCMetrics defunct, how to calculate the quality metrics by perCellQCMetrics

I am trying to follow a tutorial from Sanger institute (from May 2019) on analysis of single cell RNA Seq data. They use calculateQCMetric function to calculate the quality metrics, but I am getting an error message that calculateQCMetric is a deprecated (isSpike function is also deprecated). I want to calculate the quality metrics. Can anyone provide code for getting QCMetric step? I attached the previous defunct code below:

umi <- calculateQCMetrics(
umi,
feature_controls = list(
ERCC = isSpike(umi, "ERCC"),
MT = isSpike(umi, "MT")
)


And I use StupidWolf's code from this question isSpike function in SingleCellExperiment package is deprecated? to instead isSpike function. I also attached below:

Spikein_names = grep("^ERCC-",rownames(molecules),value=TRUE)
SpikeIn = molecules[Spikein_names,]

g = genes(EnsDb.Hsapiens.v86)
MTgene_names = g[seqnames(g)=="MT"]\$gene_id
MTgenes = molecules[rownames(molecules) %in% MTgene_names,]
Have a vector of genes to keep:

keep = setdiff(rownames(molecules),c(SpikeIn,MTgenes))
Then make the single cell object:

sce <- SingleCellExperiment(
assays=list(counts=as.matrix(molecules[keep,])),colData=annotation)
Use altExp to slot in the stuff:

altExp(sce, "spike-in") <- SummarizedExperiment(SpikeIn)
altExp(sce, "MTgenes") <- SummarizedExperiment(MTgenes)


I try the below code, which did not work.

> perCellQCMetrics(sce,
subsets = list(Spikein_names,MTgene_names),
flatten = TRUE,
exprs_values = "counts"，
use_altexps = TRUE)


• Isn't that basically the workflow from Scater? I would dive into the vignette and see how they perform the lowlevel QC. bioconductor.org/packages/release/bioc/vignettes/scater/inst/… May 24 '20 at 12:14
• I'm also following the Sanger tutorial. I've tried the code suggested by mattcwh but get the following error:  Error in assay(altExp(x, use_altexps[i]), exprs_values) : 'assay(<SummarizedExperiment>, i="character", ...)' invalid subscript 'i' 'counts' not in names(assays(<SummarizedExperiment>))  It might have something to do with logcounts, at least based on this post (?) : github.com/LTLA/scater/issues/3 Jul 6 '20 at 11:30

Ok I have figured it out and I am sharing this in case anyone can get help. I used

sce <-addPerCellQC(sce)


which calculated the QC for all the altexps also and adds them to the colData.

It would be helpful if you can provide the error message. Guessing from your codes, it's possible that the alternative experiments weren't set correctly. My suggestion:

altExp(sce, "spike-in") <- SummarizedExperiment(assays=list(counts=as.matrix(SpikeIn)))
altExp(sce, "MTgenes") <- SummarizedExperiment(assays=list(counts=as.matrix(MTgenes)))


If you're using altExp, the subsets argument in perCellQCMetrics is unnecessary in this case.

perCellQCMetrics(sce,
exprs_values="counts",
use_altexps=TRUE)