HiDDEN entrypoint w/ grouping
Usage
# method for SingleCellExperiment
HiDDENg(sce, cond_col, control_val, group_by, algo, which_grouped, grp_specific_args, ...)
# method for Seurat
HiDDENg(so, cond_col, control_val, group_by, algo, which_grouped, grp_specific_args, ...)
## S7 method for class <new("classRepresentation", slots = list(int_elementMetadata = structure("DataFrame", package = "S4Vectors"), int_colData = structure("DataFrame", package = "S4Vectors"), int_metadata = structure("list", package = "methods"), rowRanges = structure("GenomicRanges_OR_GRangesList", package = "GenomicRanges"), colData = structure("DataFrame", package = "S4Vectors"), assays = structure("Assays_OR_NULL", package = "SummarizedExperiment"), NAMES = structure("character_OR_NULL", package = "S4Vectors"), elementMetadata = structure("DataFrame", package = "S4Vectors"), metadata = structure("list", package = "methods")), contains = list( RangedSummarizedExperiment = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value }, test = function (object) TRUE, replace = function (from, to, value) { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from }, simple = TRUE, by = character(0), dataPart = FALSE, distance = 1), SummarizedExperiment = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("SummarizedExperiment", package = "SummarizedExperiment"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { from <- { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } { value <- methods::new("SummarizedExperiment") for (what in c("colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } }, test = function (object) TRUE, replace = function (from, to, value) { .value <- methods::as(from, "RangedSummarizedExperiment", TRUE) methods::as(.value, "SummarizedExperiment") <- value value <- .value { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from } }, simple = TRUE, by = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), dataPart = FALSE, distance = 2), RectangularData = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("RectangularData", package = "S4Vectors"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { from <- { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } { from <- { value <- methods::new("SummarizedExperiment") for (what in c("colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } from } }, test = function (object) TRUE, replace = function (from, to, value) { .value <- methods::as(from, "RangedSummarizedExperiment", TRUE) methods::as(.value, "RectangularData") <- value value <- .value { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from } }, simple = TRUE, by = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), dataPart = FALSE, distance = 3), Vector = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("Vector", package = "S4Vectors"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { from <- { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } { from <- { value <- methods::new("SummarizedExperiment") for (what in c("colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } from } }, test = function (object) TRUE, replace = function (from, to, value) { .value <- methods::as(from, "RangedSummarizedExperiment", TRUE) methods::as(.value, "Vector") <- value value <- .value { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from } }, simple = TRUE, by = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), dataPart = FALSE, distance = 3), Annotated = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("Annotated", package = "S4Vectors"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { from <- { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } { from <- { value <- methods::new("SummarizedExperiment") for (what in c("colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } from } }, test = function (object) TRUE, replace = function (from, to, value) { .value <- methods::as(from, "RangedSummarizedExperiment", TRUE) methods::as(.value, "Annotated") <- value value <- .value { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from } }, simple = TRUE, by = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), dataPart = FALSE, distance = 4), vector_OR_Vector = new("SClassExtension", subClass = structure("SingleCellExperiment", package = "SingleCellExperiment"), superClass = structure("vector_OR_Vector", package = "S4Vectors"), package = "SingleCellExperiment", coerce = function (from, strict = TRUE) { from <- { value <- methods::new("RangedSummarizedExperiment") for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } { from <- { value <- methods::new("SummarizedExperiment") for (what in c("colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(value, what) <- methods::slot(from, what) value } from } }, test = function (object) TRUE, replace = function (from, to, value) { .value <- methods::as(from, "RangedSummarizedExperiment", TRUE) methods::as(.value, "vector_OR_Vector") <- value value <- .value { for (what in c("rowRanges", "colData", "assays", "NAMES", "elementMetadata", "metadata")) methods::slot(from, what) <- methods::slot(value, what) from } }, simple = TRUE, by = structure("RangedSummarizedExperiment", package = "SummarizedExperiment"), dataPart = FALSE, distance = 4)), virtual = FALSE, prototype = <S4 object of class NULL>, validity = function (object) { if (disableValidity()) return(TRUE) if (debugValidity()) { whoami <- paste("validity method for", Class, "object") cat("[debugValidity] Entering ", whoami, "\n", sep = "") on.exit(cat("[debugValidity] Leaving ", whoami, "\n", sep = "")) } desc_strings <- method(object) if (isTRUE(desc_strings) || length(desc_strings) == 0L) return(TRUE) vapply(desc_strings, wmsg2, character(1), USE.NAMES = FALSE) }, access = list(), className = structure("SingleCellExperiment", package = "SingleCellExperiment"), package = "SingleCellExperiment", subclasses = list(), versionKey = <pointer: (nil)>, sealed = FALSE)>
HiDDENg(x, cond_col, control_val, group_by, ...)
## S7 method for class <new("classRepresentation", slots = list(assays = structure("list", package = "methods"), meta.data = structure("data.frame", package = "methods"), active.assay = structure("character", package = "methods"), active.ident = structure("factor", package = "methods"), graphs = structure("list", package = "methods"), neighbors = structure("list", package = "methods"), reductions = structure("list", package = "methods"), images = structure("list", package = "methods"), project.name = structure("character", package = "methods"), misc = structure("list", package = "methods"), version = structure("package_version", package = "SeuratObject"), commands = structure("list", package = "methods"), tools = structure("list", package = "methods")), contains = list(), virtual = FALSE, prototype = <S4 object of class NULL>, validity = function (object) { if (.GetSeuratCompat() < "5.0.0") { return(TRUE) } if (isFALSE(x = getOption(x = "Seurat.object.validate", default = TRUE))) { warn(message = paste("Not validating", class(x = object)[1L], "objects"), class = "validationWarning") return(TRUE) } valid <- NULL md <- slot(object = object, name = "meta.data") if (!.IsDataFrame(x = md)) { valid <- c(valid, "'meta.data' must be a base-R data.frame") } if (ncol(x = md)) { if (is.null(x = names(x = md)) || any(!nzchar(x = names(x = md)))) { valid <- c(valid, "all columns in 'meta.data' must be named") } } ocells <- colnames(x = object) if (anyDuplicated(x = ocells)) { valid <- c(valid, "cell names may not be duplicated") } if (!IsNamedList(x = slot(object = object, name = "assays"))) { valid <- c(valid, "'assays' must be a named list") } else { for (assay in Assays(object = object)) { if (!inherits(x = object[[assay]], what = c("Assay", "StdAssay"))) { valid <- c(valid, "'assays' must be a list of 'Assay' objects") break } acells <- colnames(x = object[[assay]]) if (!all(acells %in% ocells)) { valid <- c(valid, "all cells in assays must be present in the Seurat object") } else if (is.unsorted(x = MatchCells(new = acells, orig = ocells, ordered = TRUE))) { valid <- c(valid, "all cells in assays must be in the same order as the Seurat object") } if (!isTRUE(x = nzchar(x = Key(object = object[[assay]])))) { valid <- c(valid, "all assays must have a key") } } } if (!IsNamedList(x = slot(object = object, name = "reductions"), pass.zero = TRUE)) { valid <- c(valid, "'reductions' must be a named list") } else { for (reduc in Reductions(object = object)) { rcells <- Cells(x = object[[reduc]]) if (!all(rcells %in% ocells)) { valid <- c(valid, "All cells in reductions must be present in the Seurat object") } else if (is.unsorted(x = MatchCells(new = rcells, orig = ocells, ordered = TRUE))) { valid <- c(valid, "all cells in reductions must be in the same order as the Seurat object") } } } if (!IsNamedList(x = slot(object = object, name = "graphs"), pass.zero = TRUE)) { valid <- c(valid, "'graphs' must be a named list") } else { for (graph in Graphs(object = object)) { gnames <- Cells(x = object[[graph]], margin = NA_integer_) if (!all(gnames %in% colnames(x = object))) { valid <- c(valid, "all cells in graphs must be present in the Seurat object") } else if (is.unsorted(x = MatchCells(new = gnames, orig = ocells, ordered = TRUE))) { valid <- c(valid, paste0("all cells in graphs must be in the same order as the Seurat object (offending: ", graph, ")")) } } } if (!IsNamedList(x = slot(object = object, name = "neighbors"), pass.zero = TRUE)) { valid <- c(valid, "'neighbors' must be a named list") } else { for (nn in Neighbors(object = object)) { ncells <- Cells(x = object[[nn]]) if (!all(ncells %in% ocells)) { valid <- c(valid, "All cells in neighbor objects must be present in the Seurat object") } else if (is.unsorted(x = MatchCells(new = ncells, orig = ocells, ordered = TRUE))) { valid <- c(valid, "All cells in neighbor objects must be in the same order as the Seurat object") } } } if (!IsNamedList(x = slot(object = object, name = "images"), pass.zero = TRUE)) { valid <- c(valid, "'images' must be a named list") } else { for (img in Images(object = object)) { icells <- Cells(x = object[[img]]) if (!all(icells %in% ocells)) { valid <- c(valid, "All cells in images must be present in the Seurat object") } } } proj <- Project(object = object) if (length(x = proj) != 1L) { valid <- c(valid, "'project' must be a 1-length character vector") } else if (is.na(x = proj)) { valid <- c(valid, "'project' cannot be NA") } else if (!nzchar(x = proj)) { valid <- c(valid, "'project' cannot be an empty character") } idents <- Idents(object = object) if (length(x = idents) != ncol(x = object)) { valid <- c(valid, "'active.idents' must be as long as the number of cells present") } else if (!all(names(x = idents) == colnames(x = object))) { valid <- c(valid, "'active.idents' must be named with cell names") } if (length(x = slot(object = object, name = "version")) > 1) { valid <- c(valid, "Only one version is allowed") } return(valid %||% TRUE) }, access = list(), className = structure("Seurat", package = "SeuratObject"), package = "SeuratObject", subclasses = list(), versionKey = <pointer: (nil)>, sealed = FALSE)>
HiDDENg(x, cond_col, control_val, group_by, ...)Arguments
- x
input object
- ...
extra arguments passed into pipeline
- cond_col
character character indicating per-cell metadata column for condition labels
- control_val
value in per-cell condition labels representing control condition
- group_by
character character indicating per-cell metadata column for grouping labels
- algo
Pipeline
- which_grouped
character vector of argument names from the pipeline need to be grouped (by default will be determined automatically by checking which ones support indexing)
- grp_specific_args
list any arguments that need to be provided on a group-specific basis (list w/ names being groups, values being lists w/ names being arguments) (by default will be determined automatically by checking which ones support indexing)
Value
HiDDEN output - list of two (2) elements w/ names:
p_hat: HiDDEN pipeline per-cell score valueslabs: HiDDEN-adjusted per-cell condition labels
Examples
if (FALSE) { # requireNamespace("irlba", quietly = TRUE) && requireNamespace("Seurat", quietly = TRUE) && requireNamespace("SeuratObject", quietly = TRUE) && requireNamespace("SeuratData", quietly = TRUE) && ("ifnb" %in% SeuratData::InstalledData()[["Dataset"]])
so <- SeuratData::LoadData("ifnb") |>
Seurat::SCTransform(verbose = FALSE) |>
suppressWarnings() |>
suppressMessages()
sct_pca <- function(so, k) {
irlba::prcomp_irlba(
t(SeuratObject::LayerData(so, assay = "SCT", layer = "scale.data")),
n = k
)$x
}
algo <- adapters$Pipeline(to_step(sct_pca), methods$reg_logit, methods$bin_kmeans)
out <- HiDDENg(so, "stim", "CTRL", "seurat_annotations", algo, so = so, k = 15L)
names(out)
}