Nothing
data("pbmc", package = "rliger")
withNewH5Copy <- function(fun) {
ctrlpath.orig <- system.file("extdata/ctrl.h5", package = "rliger")
stimpath.orig <- system.file("extdata/stim.h5", package = "rliger")
if (!file.exists(ctrlpath.orig))
stop("Cannot find original h5 file at: ", ctrlpath.orig)
# if (file.exists("ctrltest.h5")) file.remove("ctrltest.h5")
# if (file.exists("stimtest.h5")) file.remove("stimtest.h5")
# pwd <- getwd()
# # Temp setting for GitHub Actions
# fsep <- ifelse(Sys.info()["sysname"] == "Windows", "\\", "/")
# if (Sys.info()["sysname"] == "Windows") {
# pwd <- file.path("C:\\Users", Sys.info()["user"], "Documents", fsep = fsep)
# }
# ctrlpath <- file.path(pwd, "ctrltest.h5", fsep = fsep)
# stimpath <- file.path(pwd, "stimtest.h5", fsep = fsep)
ctrlpath <- tempfile(pattern = "ctrltest_", fileext = ".h5")
stimpath <- tempfile(pattern = "stimtest_", fileext = ".h5")
cat("Working ctrl H5 file path: ", ctrlpath, "\n")
cat("Working stim H5 file path: ", stimpath, "\n")
file.copy(ctrlpath.orig, ctrlpath, copy.mode = TRUE)
file.copy(stimpath.orig, stimpath, copy.mode = TRUE)
if (!file.exists(ctrlpath))
stop("Cannot find copied h5 file at: ", ctrlpath)
if (!file.exists(stimpath))
stop("Cannot find copied h5 file at: ", stimpath)
fun(list(ctrl = ctrlpath, stim = stimpath))
if (file.exists(ctrlpath)) unlink(ctrlpath)
if (file.exists(stimpath)) unlink(stimpath)
}
closeH5Liger <- function(object) {
for (d in names(object)) {
if (isH5Liger(object, d)) {
h5file <- getH5File(object, d)
h5file$close()
}
}
}
process <- function(object, f = TRUE, q = TRUE) {
object <- normalize(object)
object <- selectGenes(object)
object <- scaleNotCenter(object)
if (f) object <- runOnlineINMF(object, k = 20, minibatchSize = 100)
if (q) object <- quantileNorm(object)
return(object)
}
is_online <- function() {
tryCatch({
readLines("https://cran.r-project.org/", n = 1)
TRUE
},
warning = function(w) invokeRestart("muffleWarning"),
error = function(e) FALSE)
}
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Clustering
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
context("Clustering")
test_that("clustering", {
skip_if_not_installed("RcppPlanc")
pbmc <- process(pbmc, f = FALSE, q = FALSE)
expect_error(runCluster(pbmc), "No cell factor loading available")
pbmc <- runOnlineINMF(pbmc, k = 20, minibatchSize = 100)
expect_message(runCluster(pbmc, nRandomStarts = 1),
"leiden clustering on unaligned")
expect_message(runCluster(pbmc, nRandomStarts = 1, method = "louvain"),
"louvain clustering on unaligned")
pbmc <- quantileNorm(pbmc)
expect_message(pbmc <- runCluster(pbmc, nRandomStarts = 1, saveSNN = TRUE),
"leiden clustering on aligned")
expect_is(defaultCluster(pbmc, droplevels = TRUE), "factor")
expect_is(pbmc@uns$snn, "dgCMatrix")
expect_message(pbmc <- runCluster(pbmc, nRandomStarts = 1, method = "louvain"),
"louvain clustering on aligned")
expect_message(defaultCluster(pbmc, name = "louvain_cluster") <- "louvain_cluster",
"Cannot have")
expect_error(defaultCluster(pbmc) <- "notexist", "Selected variable does not exist")
defaultCluster(pbmc) <- pbmc$leiden_cluster
expect_identical(pbmc$leiden_cluster, pbmc$defaultCluster)
expect_error(defaultCluster(pbmc) <- factor(letters), "Length of")
defaultCluster(pbmc) <- NULL
defaultCluster(pbmc, name = "leiden") <- unname(pbmc$leiden_cluster)
expect_identical(pbmc$leiden, pbmc$leiden_cluster)
fakevar <- pbmc$leiden_cluster
names(fakevar)[1:26] <- letters
expect_error(defaultCluster(pbmc) <- fakevar, "Not all `names")
expect_equal(calcPurity(pbmc, "leiden_cluster", "leiden_cluster"), 1)
expect_error(calcPurity(pbmc, letters, "leiden_cluster"),
"Longer/shorter `trueCluster` than cells considered requires")
expect_message(calcPurity(pbmc, unname(pbmc$leiden_cluster), "leiden_cluster"), "Assuming unnamed")
expect_equal(calcARI(pbmc, "leiden_cluster", "leiden_cluster"), 1)
expect_error(calcARI(pbmc, letters, "leiden_cluster"),
"Longer/shorter `trueCluster` than cells considered requires")
expect_message(calcARI(pbmc, unname(pbmc$leiden_cluster), "leiden_cluster"), "Assuming unnamed")
expect_equal(calcNMI(pbmc, "leiden_cluster", "leiden_cluster"), 1)
expect_error(calcNMI(pbmc, letters, "leiden_cluster"),
"Longer/shorter `trueCluster` than cells considered requires")
expect_message(calcNMI(pbmc, unname(pbmc$leiden_cluster), "leiden_cluster"), "Assuming unnamed")
# Tests for singleton grouping. Need to find the case where there are singletons
# expect_message(runCluster(pbmc, nRandomStarts = 1,
# partitionType = "CPMVertexPartition"),
# "63 singletons identified. 112 final clusters")
# pbmc <- runCluster(pbmc, nRandomStarts = 1,
# partitionType = "CPMVertexPartition",
# groupSingletons = FALSE)
# expect_equal(nlevels(pbmc$leiden_cluster), 113)
# expect_true("singleton" %in% pbmc$leiden_cluster)
# Test downsampling with the info already here
pbmc.small1 <- downsample(pbmc, maxCells = 100)
expect_true(all.equal(sapply(pbmc.small1@datasets, ncol), c(ctrl = 44, stim = 56)))
idx <- downsample(pbmc, balance = c("dataset"), maxCells = 100,
returnIndex = TRUE)
expect_is(idx, "integer")
expect_equal(length(idx), 200)
pbmc <- mapCellMeta(pbmc, from = "dataset", newTo = "pseudo",
`ctrl` = "CTRL")
expect_identical(pbmc$pseudo,
setNames(factor(c(rep("CTRL", 300), rep("stim", 300))),
colnames(pbmc)))
})
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Dimensionality reduction
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
context("dimensionality reduction")
test_that("dimensionality reduction", {
skip_if_not_installed("RcppPlanc")
pbmc <- process(pbmc)
expect_message(runUMAP(pbmc, useRaw = TRUE),
"Generating UMAP on unaligned")
expect_error(dimRed(pbmc), "available in this")
expect_message(pbmc <- runUMAP(pbmc, useRaw = FALSE),
"Generating UMAP on aligned")
pbmc@uns$defaultDimRed <- NULL
expect_message(dimRed(pbmc), "No default")
defaultDimRed(pbmc) <- "UMAP"
expect_error(defaultDimRed(pbmc) <- letters, "Can only set one")
expect_identical(defaultDimRed(pbmc), dimRed(pbmc, "UMAP"))
expect_equal(dim(dimRed(pbmc)), c(ncol(pbmc), 2))
expect_no_error(dimRed(pbmc, "UMAP2") <- dimRed(pbmc, "UMAP"))
expect_equal(nrow(dimRed(pbmc, name = 1, cellIdx = 1:10)), 10)
expect_equal(nrow(dimRed(pbmc, name = 1, useDatasets = names(pbmc))), ncol(pbmc))
expect_equal(nrow(dimRed(pbmc, name = "UMAP", cellIdx = 1:10)), 10)
expect_equal(nrow(dimRed(pbmc, name = "UMAP", useDatasets = names(pbmc))), ncol(pbmc))
expect_no_error(dimRed(pbmc, 2) <- NULL)
expect_message(runTSNE(pbmc, useRaw = TRUE),
"Generating TSNE \\(Rtsne\\) on unaligned")
expect_message(pbmc <- runTSNE(pbmc, useRaw = FALSE),
"Generating TSNE \\(Rtsne\\) on aligned")
expect_equal(dim(dimRed(pbmc, "TSNE")), c(ncol(pbmc), 2))
expect_error(runTSNE(pbmc, method = "fft"),
"Please pass in path to FIt-SNE directory as fitsne.path.")
})
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Differential Expression
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
context("Differential Expression")
test_that("wilcoxon", {
skip_if_not_installed("RcppPlanc")
expect_error(runMarkerDEG(pbmc),
"No `conditionBy` given or default cluster not set")
pbmc <- process(pbmc)
pbmc <- runCluster(pbmc, nRandomStarts = 1)
res0 <- runMarkerDEG(pbmc, conditionBy = "dataset", useDatasets = 1, method = "wilcox")
expect_true(all(is.nan(res0$pval)))
res1 <- runMarkerDEG(pbmc, method = "wilcox")
expect_equal(dim(res1), c(249 * nlevels(pbmc$leiden_cluster), 10))
res2 <- runMarkerDEG(pbmc, conditionBy = "dataset", splitBy = "leiden_cluster", method = "wilcox")
expect_is(res2, "data.frame")
hm1 <- plotMarkerHeatmap(pbmc, res1, dedupBy = "l")
hm2 <- plotMarkerHeatmap(pbmc, res1, dedupBy = "p")
expect_is(hm1, "HeatmapList")
expect_is(hm2, "HeatmapList")
expect_is(plotVolcano(res1, 0), "ggplot")
if (requireNamespace("EnhancedVolcano", quietly = TRUE)) {
expect_is(plotEnhancedVolcano(res1, 0), "ggplot")
}
expect_error(getFactorMarkers(pbmc, "ctrl", "stim", factorShareThresh = 0),
"No factor passed the dataset specificity threshold")
expect_message(
res3 <- getFactorMarkers(pbmc, "ctrl", "stim", printGenes = TRUE)
)
expect_is(res3, "list")
expect_identical(names(res3), c("ctrl", "shared", "stim", "num_factors_V1",
"num_factors_V2"))
skip_if_not_installed("gprofiler2")
expect_error(runGOEnrich(res1, group = "a"),
"Selected groups not available")
expect_error(runGOEnrich(res1, group = 0, orderBy = c("logFC", "pval")),
"Only one `orderBy`")
expect_error(runGOEnrich(res1, orderBy = "score"),
"`orderBy` should be one of")
if (is_online()) {
go1 <- runGOEnrich(res1, group = 0, orderBy = "logFC", significant = FALSE)
expect_is(go1, "list")
expect_is(go1$`0`$result, "data.frame")
go2 <- runGOEnrich(res1, group = 0, orderBy = "pval", significant = FALSE)
expect_is(go2, "list")
expect_is(go2$`0`$result, "data.frame")
go3 <- runGOEnrich(res1, group = c(0, 1), orderBy = "pval", significant = FALSE)
expect_is(plotGODot(go1, pvalThresh = 1), "ggplot")
expect_error(plotGODot(go1, group = "ctrl"), "Specified group not available")
expect_message(plotGODot(go1, group = '0'), "No enough matching")
expect_is(plotGODot(go3, pvalThresh = 1), "list")
}
})
test_that("pseudo bulk", {
skip_if_not_installed("RcppPlanc")
skip_if_not_installed("DESeq2")
nIsecGenes <- length(Reduce(intersect, lapply(rawData(pbmc), rownames)))
pbmc <- process(pbmc)
pbmc <- runCluster(pbmc, nRandomStarts = 1)
res1 <- runPairwiseDEG(pbmc, groupTest = pbmc$leiden_cluster == 1,
groupCtrl = pbmc$leiden_cluster == 2,
method = "pseudo")
expect_is(res1, "data.frame")
expect_true(all.equal(dim(res1), c(nIsecGenes, 7)))
res2 <- runPairwiseDEG(pbmc, groupTest = 1, groupCtrl = 2,
variable1 = "leiden_cluster",
method = "pseudo", useReplicate = "dataset")
expect_is(res2, "data.frame")
expect_true(all.equal(dim(res2), c(nIsecGenes, 7)))
res3 <- runPairwiseDEG(pbmc, groupTest = 1, groupCtrl = 2,
variable1 = "leiden_cluster",
method = "pseudo")
expect_true(all.equal(res1[,-2], res3[,-2])) # Different in "group" column
pbmc$leiden2 <- pbmc$leiden_cluster
res4 <- runPairwiseDEG(pbmc, groupTest = 1, groupCtrl = 2,
variable1 = "leiden_cluster", variable2 = "leiden2",
method = "pseudo", useReplicate = "dataset")
expect_true(all.equal(res2[,-2], res4[,-2])) # Different in "group" column
expect_error(runPairwiseDEG(pbmc, variable2 = "yo"),
"Please see")
expect_message(
runPairwiseDEG(
pbmc, groupTest = pbmc$dataset == "ctrl" & pbmc$leiden_cluster == 0,
groupCtrl = pbmc$dataset == "stim" & pbmc$leiden_cluster == 0,
method = "pseudo", useReplicate = "dataset", nPsdRep = 1
),
"Too few replicates"
)
pbmc@datasets$ctrl@rawData <- NULL
expect_error(
runPairwiseDEG(
pbmc, groupTest = 1, groupCtrl = 2,
variable1 = "leiden_cluster", method = "pseudo",
useReplicate = "dataset"
),
"not all available for involved datasets"
)
})
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# GSEA
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
context("GSEA")
test_that("gsea", {
skip_if_not(is_online())
skip_if_not_installed("org.Hs.eg.db")
skip_if_not_installed("reactome.db")
skip_if_not_installed("fgsea")
skip_if_not_installed("AnnotationDbi")
custom <- list(
`Immune System` = c("9636", "2633", "6282", "6280", "6279", "2207", "2214",
"6402", "91543", "6233", "10578", "3553", "5473",
"3627", "51316", "929", "972")
)
expect_warning({
expect_is(runGSEA(pbmcPlot, genesets = "Immune System"), "list")
expect_is(runGSEA(pbmcPlot, customGenesets = custom), "list")
})
})
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# ATAC
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
context("ATAC")
data("bmmc")
test_that("ATAC", {
skip_if_not_installed("RcppPlanc")
skip_if_not_installed("GenomicRanges")
skip_if_not_installed("IRanges")
skip_if_not_installed("psych")
bmmc <- normalize(bmmc)
bmmc <- selectGenes(bmmc)
bmmc <- scaleNotCenter(bmmc)
bmmc <- runOnlineINMF(bmmc, minibatchSize = 80)
bmmc <- quantileNorm(bmmc)
bmmc <- normalizePeak(bmmc)
bmmc <- imputeKNN(bmmc, reference = "atac", queries = "rna")
expect_is(dataset(bmmc, "rna"), "ligerATACDataset")
corr <- linkGenesAndPeaks(
bmmc, useDataset = "rna",
pathToCoords = system.file("extdata/hg19_genes.bed",
package = "rliger")
)
expect_is(corr, "dgCMatrix")
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.