#' @rdname newParams #' @export 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()) params <- new("SCDDParams", SCDat = scDatEx) 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, "ExpressionSet"), 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() SCDat <- getParam(object, "SCDat") cat("Data:", "\n") cat("(SCDat)", "\n") cat("ExpressionSet with", dim(SCDat)[1], "features and", dim(SCDat)[2], "samples", "\n\n") showPP(object, pp) })