Skip to content
Snippets Groups Projects
SCDDParams-methods.R 3.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • Luke Zappia's avatar
    Luke Zappia committed
    #' @rdname newParams
    
    #' @importFrom methods new
    #' @export
    
    Luke Zappia's avatar
    Luke Zappia committed
    newSCDDParams <- function(...) {
    
        if (!requireNamespace("scDD", quietly = TRUE)) {
    
    Luke Zappia's avatar
    Luke Zappia committed
            stop("The scDD simulation requires the 'scDD' package.")
    
        # Initialise scDatEx to avoid NOTE
        scDatEx <- NA
    
    Luke Zappia's avatar
    Luke Zappia committed
        utils::data("scDatEx", package = "scDD", envir = environment())
    
    Luke Zappia's avatar
    Luke Zappia committed
    
    
    Luke Zappia's avatar
    Luke Zappia committed
        params <- new("SCDDParams", SCdat = scDatEx)
    
    Luke Zappia's avatar
    Luke Zappia committed
    
        params <- setParams(params, ...)
    
        return(params)
    }
    
    #' @importFrom checkmate checkInt checkClass checkNumeric
    setValidity("SCDDParams", function(object) {
    
        v <- getParams(object, slotNames(object))
    
        checks <- c(nGenes = checkInt(v$nGenes, lower = 1),
                    nCells = checkInt(v$nCells, lower = 1),
                    seed = checkInt(v$seed, lower = 0),
    
                    SCDat = checkClass(v$SCdat, "SummarizedExperiment"),
    
    Luke Zappia's avatar
    Luke Zappia committed
                    nDE = checkInt(v$nDE, lower = 0),
                    nDP = checkInt(v$nDP, lower = 0),
                    nDM = checkInt(v$nDM, lower = 0),
                    nDB = checkInt(v$nDB, lower = 0),
                    nEE = checkInt(v$nEE, lower = 0),
                    nEP = checkInt(v$nEP, lower = 0),
                    sd.range = checkNumeric(v$sd.range, lower = 0, len = 2),
                    modeFC = checkNumeric(v$modeFC, lower = 0, len = 3),
    
    Luke Zappia's avatar
    Luke Zappia committed
                    varInflation = checkNumeric(v$varInflation, lower = 0, len = 2),
                    condition = checkCharacter(v$condition, len = 1))
    
    Luke Zappia's avatar
    Luke Zappia committed
    
        if (v$nGenes != (v$nDE + v$nDP + v$nDM + v$nDB + v$nEE + v$nEP)) {
            checks <- c(checks, nGenes = paste("nGenes is not consistent with",
                                               "nDE, nDP, nDM, nDB, nEE, nEP"))
        }
    
    
    Luke Zappia's avatar
    Luke Zappia committed
        if (!(v$condition %in% colnames(SummarizedExperiment::colData(v$SCdat)))) {
            checks <- c(checks, condition = paste("condition must be a column of",
                                                  "colData(SCDat)"))
        }
    
    
    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
    setMethod("setParam", "SCDDParams", function(object, name, value) {
        checkmate::assertString(name)
    
        if (name == "nGenes") {
            stop(name, " cannot be set directly, set nDE, nDP, nDM, nDB, nEE or ",
                 "nEP instead")
        }
    
        nNames <- c("nDE", "nDP", "nDM", "nDB", "nEE", "nEP")
        if (name %in% nNames) {
            checkmate::assertInt(value, lower = 0)
            total <- value
            for (nName in nNames) {
                if (nName != name) {
                    total <- total + getParam(object, nName)
                }
            }
            object <- setParamUnchecked(object, "nGenes", total)
        }
    
        object <- callNextMethod()
    
        return(object)
    })
    
    setMethod("show", "SCDDParams", function(object) {
    
        pp <- list("Genes:"       = c("[nDE]"       = "nDE",
                                      "[nDP]"       = "nDP",
                                      "[nDM]"       = "nDM",
                                      "[nDP]"       = "nDP",
                                      "[nEE]"       = "nEE",
                                      "[nEP]"       = "nEP"),
                   "Fold change:" = c("[SD Range]"  = "sd.range",
                                      "[Mode FC]"   = "modeFC"),
    
    Luke Zappia's avatar
    Luke Zappia committed
                   "Variance:"    = c("[Inflation]" = "varInflation"),
                   "Condition:"   = c("[Condition]" = "condition"))
    
    Luke Zappia's avatar
    Luke Zappia committed
    
        callNextMethod()
    
    
    Luke Zappia's avatar
    Luke Zappia committed
        SCdat <- getParam(object, "SCdat")
    
    Luke Zappia's avatar
    Luke Zappia committed
        cat("Data:", "\n")
    
    Luke Zappia's avatar
    Luke Zappia committed
        cat("(SCdat)", "\n")
    
    Luke Zappia's avatar
    Luke Zappia committed
        cat("SummarizedExperiment with", dim(SCdat)[1], "features and",
            dim(SCdat)[2], "samples", "\n\n")
    
    Luke Zappia's avatar
    Luke Zappia committed
    
        showPP(object, pp)
    })