Skip to content
Snippets Groups Projects
Lun2Params-methods.R 4.69 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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)
    })