[Rd] minor flaw in integrate()
Peter Ruckdeschel
Peter.Ruckdeschel at uni-bayreuth.de
Thu Jun 28 23:05:10 CEST 2007
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
More information about the R-devel
mailing list