diff --git a/R/llcont.R b/R/llcont.R index d8e496a..40d2fcf 100644 --- a/R/llcont.R +++ b/R/llcont.R @@ -51,14 +51,23 @@ llcont.glm <- function(x, ...){ switch(fam, binomial = { if(is.matrix(y)) { - ## Bolt: replaced apply(..., 1, sum) with optimized rowSums() for performance n <- rowSums(y) - y <- ifelse(n == 0, 0, y[, 1]/n) + ## Bolt: replaced ifelse with mathematical operations and logical subsetting for performance + y_opt <- y[, 1]/n + cond_n <- n == 0 + cond_n[is.na(cond_n)] <- FALSE + y_opt[cond_n] <- 0 + y <- y_opt } else { n <- rep.int(1, length(y)) } m <- if (any(n > 1)) n else wt - wt <- ifelse(m > 0, (wt/m), 0) + ## Bolt: replaced ifelse with mathematical operations and logical subsetting for performance + wt_opt <- wt/m + cond_m <- m <= 0 + cond_m[is.na(cond_m)] <- FALSE + wt_opt[cond_m] <- 0 + wt <- wt_opt dbinom(round(m * y), round(m), mpreds, log = TRUE) * wt }, quasibinomial = {