From p.dalgaard@biostat.ku.dk  Thu Mar  8 09:23:50 2001
From: p.dalgaard@biostat.ku.dk (Peter Dalgaard BSA)
Date: 08 Mar 2001 10:23:50 +0100
Subject: [Rd] inconsistent results when calling functions with other func (PR#869)
In-Reply-To: Paul.White@dsto.defence.gov.au's message of "Thu, 8 Mar 2001 08:34:51 +0100 (MET)"
References: <200103080734.IAA02098@pubhealth.ku.dk>
Message-ID: <x2elw8fwbd.fsf@blueberry.kubism.ku.dk>

Paul.White@dsto.defence.gov.au writes:

> Hello Bug people,
> 
> I have an unexpected behavior and am unsure whether the problem is in my
> thinking, my implementation or the program R.
> 
> Basically I get two different answers depending on how I call a function
> which takes other functions as arguments as indicated below.
> To me it should make no difference if f is a function that returns the
> function g then z(f(x)) whould give the same as
> y<- f(x)
> z(y)
> but I appear to get different answers as below. I have not distilled the
> problem down to something you can replicate in total but have I done
> something obviously wrong ?

Lazy evaluation sometimes plays tricks on the unsuspecting. In the
first case, eifs.at.time.using.density(5000,eifs,1e-4,2) is evaluated
when adapt first calls prob.of.fracture, in the other it is of course
evaluated from the start. If eifs.at.time.using.density is dependent
on values that might have changed...

You're not showing us eifs.at.time.using.density, so it is difficult
to say whether you have a bug or not.

> > risk <- function(f,g,H,lower.limits,upper.limits) 
> + {   prob.of.fracture <-  function(x)
> +       { a  <- x[1] 
> +         kc <- x[2] 
> +         f(a) * g(kc) * H(a,kc) }
> +
> adapt(2,lower.limits,upper.limits,minpts=200,maxpts=20000,prob.of.fracture,e
> ps=1e-3) }
> >
> risk(eifs.at.time.using.density(5000,eifs,1e-4,2),g,H,c(0.001,20),c(.5,60))
> [1] 1.999471
>        value       relerr       minpts       lenwrk        ifail 
>     28.39852 0.0003455776          627         2803            0 
> > 
> > eifs.5000 <- eifs.at.time.using.density(5000,eifs,1e-4,2)
> [1] 1.999471
> > risk(eifs.5000,g,H,c(0.001,20),c(.5,60))
>        value       relerr       minpts       lenwrk        ifail 
> 5.461088e-13 0.0006449058          741         2803            0 
> 
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> Send "info", "help", or "[un]subscribe"
> (in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
> 

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] inconsistent results when calling functions with other func (PR#869)
Peter Dalgaard BSA