From aac2b5d497dda85dcedbd6f557a1148a84032876 Mon Sep 17 00:00:00 2001 From: Luke Zappia <lazappi@users.noreply.github.com> Date: Mon, 15 Apr 2019 15:51:21 +1000 Subject: [PATCH] Protect against integer overflow in sim functions Fixes #49 --- R/lun-simulate.R | 8 +++++--- R/simple-simulate.R | 7 ++++--- R/splat-simulate.R | 13 ++++++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/R/lun-simulate.R b/R/lun-simulate.R index b94c656..526733e 100644 --- a/R/lun-simulate.R +++ b/R/lun-simulate.R @@ -105,9 +105,11 @@ lunSimulate <- function(params = newLunParams(), verbose = TRUE, ...) { rownames(cell.means) <- gene.names if (verbose) {message("Simulating counts...")} - counts <- matrix(rnbinom(nGenes * nCells, mu = cell.means, - size = 1 / count.disp), - nrow = nGenes, ncol = nCells) + counts <- matrix(rnbinom( + as.numeric(nGenes) * as.numeric(nCells), + mu = cell.means, size = 1 / count.disp + ), + nrow = nGenes, ncol = nCells) if (verbose) {message("Creating final dataset...")} rownames(counts) <- gene.names diff --git a/R/simple-simulate.R b/R/simple-simulate.R index 3c074ce..6ca63d3 100644 --- a/R/simple-simulate.R +++ b/R/simple-simulate.R @@ -43,9 +43,10 @@ simpleSimulate <- function(params = newSimpleParams(), verbose = TRUE, ...) { means <- rgamma(nGenes, shape = mean.shape, rate = mean.rate) if (verbose) {message("Simulating counts...")} - counts <- matrix(rnbinom(nGenes * nCells, mu = means, - size = 1 / count.disp), - nrow = nGenes, ncol = nCells) + counts <- matrix(rnbinom( + as.numeric(nGenes) * as.numeric(nCells), + mu = means, size = 1 / count.disp), + nrow = nGenes, ncol = nCells) if (verbose) {message("Creating final dataset...")} cell.names <- paste0("Cell", seq_len(nCells)) diff --git a/R/splat-simulate.R b/R/splat-simulate.R index 6c9a0e7..238dedd 100644 --- a/R/splat-simulate.R +++ b/R/splat-simulate.R @@ -646,9 +646,10 @@ splatSimBCVMeans <- function(sim, params) { bcv <- (bcv.common + (1 / sqrt(base.means.cell))) } - means.cell <- matrix(rgamma(nGenes * nCells, shape = 1 / (bcv ^ 2), - scale = base.means.cell * (bcv ^ 2)), - nrow = nGenes, ncol = nCells) + means.cell <- matrix(rgamma( + as.numeric(nGenes) * as.numeric(nCells), + shape = 1 / (bcv ^ 2), scale = base.means.cell * (bcv ^ 2)), + nrow = nGenes, ncol = nCells) colnames(means.cell) <- cell.names rownames(means.cell) <- gene.names @@ -680,8 +681,10 @@ splatSimTrueCounts <- function(sim, params) { nCells <- getParam(params, "nCells") cell.means <- assays(sim)$CellMeans - true.counts <- matrix(rpois(nGenes * nCells, lambda = cell.means), - nrow = nGenes, ncol = nCells) + true.counts <- matrix(rpois( + as.numeric(nGenes) * as.numeric(nCells), + lambda = cell.means), + nrow = nGenes, ncol = nCells) colnames(true.counts) <- cell.names rownames(true.counts) <- gene.names -- GitLab