#Generic negative exponential function with offset Ftaf <- function (t, s3, c, b, a, dc, db) { .expr1 <- exp(b + db*s3) .expr3 <- t - a .expr5 <- exp(((-.expr1) * .expr3)) .expr6 <- 1 - .expr5 .value <- c*.expr6 + dc*s3*.expr6 # set gradient attribute .actualArgs <- as.list(c("c", "b", "a", "dc", "db")) .grad <- array(0, c(length(.value), 5), list(NULL, c("c", "b", "a", "dc", "db"))) .grad[, "c"] <- .expr6 .grad[, "b"] <- c * (.expr5 * (.expr1 * .expr3)) .grad[, "a"] <- -(c * (.expr5 * .expr1)) .grad[, "dc"] <- ifelse(s3, .expr6, 0) .grad[, "db"] <- ifelse(s3, c * (.expr5 * (.expr1 * .expr3)), 0) dimnames(.grad) <- list(NULL, .actualArgs) attr(.value, "gradient") <- .grad # return .value }