Hi, I noticed a minor flaw in integrate() from package stats:
Taking up arguments lower and upper from integrate(), if (lower == Inf) && (upper == Inf) or if (lower == -Inf) && (upper == -Inf) integrate() calculates the value for (lower==-Inf) && (upper==Inf). Rather, it should return 0. Quick fix: ### old code ### ### [snip] else { if (is.na(lower) || is.na(upper)) stop("a limit is missing") if (is.finite(lower)) { inf <- 1 bound <- lower } else if (is.finite(upper)) { inf <- -1 bound <- upper } else { inf <- 2 bound <- 0 } wk <- .External("call_dqagi", ff, rho = environment(), as.double(bound), as.integer(inf), as.double(abs.tol), as.double(rel.tol), limit = limit, PACKAGE = "base") } ### [snip] ### new code to replace the old one ### ### [snip] else { if (is.na(lower) || is.na(upper)) stop("a limit is missing") if (lower == upper){ wk <- list("value" = 0, "abs.error" = 0, "subdivisions" = subdivisions, "ierr" = 0 ) } else { if (is.finite(lower)) { inf <- 1 bound <- lower } else if (is.finite(upper)) { inf <- -1 bound <- upper } else { inf <- 2 bound <- 0 } wk <- .External("call_dqagi", ff, rho = environment(), as.double(bound), as.integer(inf), as.double(abs.tol), as.double(rel.tol), limit = limit, PACKAGE = "base") } } ### [snip] Best, Peter ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel