Skip to content
Snippets Groups Projects
SCDDParams-methods.R 3.22 KiB
Newer Older
Luke Zappia's avatar
Luke Zappia committed
#' @rdname newParams
#' @export
Luke Zappia's avatar
Luke Zappia committed
#' @importFrom utils data
Luke Zappia's avatar
Luke Zappia committed
newSCDDParams <- function(...) {

    if (!requireNamespace("scDD", quietly = TRUE)) {
        stop("The scDD simulation requires the 'scDD' package. ",
             "See https://github.com/kdkorthauer/scDD for installation.")
    }

    data("scDatEx", package = "scDD", envir = environment())

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),
Luke Zappia's avatar
Luke Zappia committed
                SCDat = checkClass(v$SCdat, "ExpressionSet"),
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),
                varInflation = checkNumeric(v$varInflation, lower = 0, len = 2))

    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"))
    }

    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"),
               "Variance:"    = c("[Inflation]" = "varInflation"))

    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")
    cat("ExpressionSet with", dim(SCdat)[1], "features and", dim(SCdat)[2],
Luke Zappia's avatar
Luke Zappia committed
        "samples", "\n\n")

    showPP(object, pp)
})