From tplate at blackmesacapital.com  Thu Jul  8 17:53:01 2004
From: tplate at blackmesacapital.com (Tony Plate)
Date: Thu Jul  8 17:53:19 2004
Subject: [Rd] (PR#7070)
In-Reply-To: <20040708153110.679E1108E6@slim.kubism.ku.dk>
References: <20040708153110.679E1108E6@slim.kubism.ku.dk>
Message-ID: <6.1.0.6.2.20040708094507.05bbd9f8@mailhost.blackmesacapital.com>

AFAICS, this is not a bug: you need to name those extra arguments that you 
want passed to the function, otherwise they are positionally matched to 
other arguments of integrate.

E.g.:

# Here "-1" and "7" are interpreted as the values for the arguments 
"rel.tol" and "abs.tol" of integrate
 > integrate(dnorm,lower=0,upper=1,subdivisions=100,-1,7)
0.3413447 with absolute error < 3.8e-15

# Give your extra arguments names (that do not match arguments of 
integrate) and they get passed down to the function being integrated
 > integrate(dnorm,lower=0,upper=1,subdivisions=100,mean=-1,sd=7)
0.05565302 with absolute error < 6.2e-16
 >

However, given that the "..." appears at the end of the argument list for 
integrate() (which means that prior argument names can be partially 
matched), how would one pass the value for an argument named "k" (for example)?

 > integrate(function(x,k=NA) browser(), 0, 1, k=7)
Called from: f(x, ...)
Browse[1]> k
[1] NA
Browse[1]>

(the problem is that "k" partially matches the integrate() argument "keep.xy")

-- Tony

At Thursday 09:31 AM 7/8/2004, Rembert.DeBlander@econ.kuleuven.ac.be wrote:
> > version
>          _
>platform i686-pc-linux-gnu
>arch     i686
>os       linux-gnu
>system   i686, linux-gnu
>status
>major    1
>minor    7.1
>year     2003
>month    06
>day      16
>language R
>
>Bug:
>
>integrate(f,lower,upper,extra_args)
>
>where
>
>f <- function(x,extra_args)
>{
>body
>}
>
>integrate doesn't pass the extra arguments when calling f.
>As a first check of this finding I integrated dnorm from minus infinity =
>to 1, with mu =3D -1 and sd =3D 7. As shown below the result is not =
>equal to pnorm(1,-1,7), but it is equal to pnorm(1,0,1) where the =
>default values for mu and sd are taken.
>As a second check I debugged integrate see example 2 below.
>Since the function I need to integrate doesn't make sense with default =
>values for the extra parameters, I do not find a way to work around this =
>problem.
>I have not found any relevant existing bug reports.
>
>Rembert.DeBlander@econ.kuleuven.ac.be
>
>Example 1
>*********
> > integrate(dnorm,lower=3D"-INF",upper=3D1,-1,7)
>Error in integrate(dnorm, lower =3D "-INF", upper =3D 1, -1, 7) :
>         invalid parameter values
>
> > integrate(dnorm,lower=3D"-INF",upper=3D1,subdivisions=3D100,-1,7)
>0.841331 with absolute error < 0.16=20
>
> >integrate(dnorm,lower=3D"-INF",upper=3D1,subdivisions=3D100,rel.tol=3D.M=
>achine$double.eps^0.25,abs.tol=3D.Machine$double.eps^0.25,-1,7)
>0.8413448 with absolute error < 1.5e-05
>
> > pnorm(1,-1,7)
>[1] 0.6124515
>
> > pnorm(1,0,1)
>[1] 0.8413447
>
>Example 2
>*********
>fex <- function(x, v, M)
>{
>(x - t(v) %*% M %*% v)^2
>}
>debug(integrate)
>integrate(fex,lower=3D-3,upper=3D7,subdivisions=3D100,c(1,2,3),matrix(2,3=
>,3))
>
>results in
>.
>.
>.
>debug: wk <- .External("call_dqags", ff, rho =3D environment(), =
>as.double(lower),
>     as.double(upper), as.double(abs.tol), as.double(rel.tol),
>     limit =3D limit, PACKAGE =3D "base")
>Browse[1]>
>Error in t(v) : Argument "v" is missing, with no default
>
>______________________________________________
>R-devel@stat.math.ethz.ch mailing list
>https://www.stat.math.ethz.ch/mailman/listinfo/r-devel


[Rd] (PR#7070)
Tony Plate