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(
   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(
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)

Thanks in advance.

  • 1
    $\begingroup$ 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/… $\endgroup$
    – user3051
    Commented May 24, 2020 at 12:14
  • $\begingroup$ 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 $\endgroup$
    – Nereus
    Commented Jul 6, 2020 at 11:30

2 Answers 2


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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.