Skip to content
Snippets Groups Projects
Lun2Params-methods.R 4.69 KiB
Newer Older
Luke Zappia's avatar
Luke Zappia committed
#' @rdname newParams
#' @importFrom methods new
Luke Zappia's avatar
Luke Zappia committed
#' @export
newLun2Params <- function(...) {

    params <- new("Lun2Params")
    params <- setParams(params, ...)

    return(params)
}

#' @importFrom checkmate checkInt checkNumber checkNumeric checkLogical
#' checkCharacter checkFactor
Luke Zappia's avatar
Luke Zappia committed
setValidity("Lun2Params", function(object) {

    v <- getParams(object, slotNames(object))

    nCells <- v$nCells
    nGenes <- v$nGenes
    nPlates <- v$nPlates
    checks <- c(nGenes = checkInt(v$nGenes, lower = 1),
                nCells = checkInt(v$nCells, lower = 1),
                seed = checkInt(v$seed, lower = 0),
                nPlates = checkInt(v$nPlates, lower = 1),
Luke Zappia's avatar
Luke Zappia committed
                plate.ingroup = checkCharacter(v$plate.ingroup, min.len = 1),
Luke Zappia's avatar
Luke Zappia committed
                plate.mod = checkNumber(v$plate.mod, lower = 0),
                plate.var = checkNumber(v$plate.var, lower = 0),
                gene.means = checkNumeric(v$gene.means, lower = 0,
                                          len = nGenes),
                gene.disps = checkNumeric(v$gene.disps, lower = 0,
                                          len = nGenes),
                gene.ziMeans = checkNumeric(v$gene.ziMeans, lower = 0,
                                            len = nGenes),
                gene.ziDisps = checkNumeric(v$gene.ziDisps, lower = 0,
                                            len = nGenes),
                gene.ziProps = checkNumeric(v$gene.ziProps, lower = 0,
                                            len = nGenes),
Luke Zappia's avatar
Luke Zappia committed
                cell.plates = checkFactor(v$cell.plates, len = nCells),
                cell.libSizes = checkNumeric(v$cell.libSizes, lower = 0,
                                             len = nCells),
Luke Zappia's avatar
Luke Zappia committed
                cell.libMod = checkNumber(v$cell.libMod, lower = 0),
                de.nGene = checkInt(v$de.nGenes, lower = 0),
Luke Zappia's avatar
Luke Zappia committed
                de.fc = checkNumber(v$de.fc, lower = 0))
Luke Zappia's avatar
Luke Zappia committed

    if (all(checks == TRUE)) {
        valid <- TRUE
    } else {
        valid <- checks[checks != TRUE]
        valid <- paste(names(valid), valid, sep = ": ")
    }

    return(valid)
})

#' @rdname setParam
#' @importFrom methods slotNames
Luke Zappia's avatar
Luke Zappia committed
setMethod("setParam", "Lun2Params", function(object, name, value) {
    checkmate::assertString(name)

    if (name == "nCells" || name == "nPlates") {
        stop(name, " cannot be set directly, set cell.plates instead")
    }

    if (name == "cell.plates") {
        old.nCells <- getParam(object, "nCells")
        object <- setParamUnchecked(object, "nCells", length(value))
        object <- setParamUnchecked(object, "nPlates", length(unique(value)))
        if (length(value) != old.nCells) {
            warning("nCells has been changed. cell.libSizes will be sampled ",
                    "to length nCells")
Luke Zappia's avatar
Luke Zappia committed
            selected <- sample(seq_len(old.nCells), length(value),
                               replace = TRUE)
Luke Zappia's avatar
Luke Zappia committed
            old.libSizes <- getParam(object, "cell.libSizes")
            object <- setParamUnchecked(object, "cell.libSizes",
                                        old.libSizes[selected])
        }
Luke Zappia's avatar
Luke Zappia committed
        value <- factor(value)
Luke Zappia's avatar
Luke Zappia committed
    }

    if (name == "nGenes") {
        old.nGenes <- getParam(object, "nGenes")
        if (value != old.nGenes) {
            warning("nGenes has been changed. Gene parameter vectors will be ",
                    "sampled to length new nGenes.")
Luke Zappia's avatar
Luke Zappia committed
            selected <- sample(seq_len(old.nGenes), size = value,
                               replace = TRUE)
Luke Zappia's avatar
Luke Zappia committed
            for (parameter in grep("gene", slotNames(object), value = TRUE)) {
                old.value <- getParam(object, parameter)
                object <- setParamUnchecked(object, parameter,
                                            old.value[selected])
            }
        }
    }

    object <- callNextMethod()

    return(object)
})

setMethod("show", "Lun2Params", function(object) {

Luke Zappia's avatar
Luke Zappia committed
    pp <- list("Plates:"    = c("[Number]"        = "nPlates",
                                "[Modifier]"      = "plate.mod",
Luke Zappia's avatar
Luke Zappia committed
                                "(Variance)"      = "plate.var"),
               "Genes:"     = c("(Means)"         = "gene.means",
                                "(Dispersions)"   = "gene.disps",
                                "(ZI Means)"      = "gene.ziMeans",
                                "(ZI Disps)"      = "gene.ziDisps",
                                "(ZI Props)"      = "gene.ziProps"),
               "Cells:"     = c("[Plates]"        = "cell.plates",
                                "(Library Sizes)" = "cell.libSizes",
                                "[Lib Size Mod]"  = "cell.libMod"),
               "Diff Expr:" = c("[Genes]"         = "de.nGenes",
                                "[Fold change]"   = "de.fc"))

    callNextMethod()
    showPP(object, pp)
})