Juan Pablo Lewinger
2006-Sep-13 00:34 UTC
[R] Retrieving value computed in inner function call
Dear R users, Consider the following example function: f = function(a,b) { g = function(x) a*x + b h = function(x) g(x)^2 + x^2 opt = optimize(h,lower = -1, upper = 1) x.min = opt$minimum h.xmin = opt$objective g.xmin = g(x.min) return(c(x.min, h.xmin, g.xmin)) } In my real problem the function that plays the role of "g" is costly to compute. Now, to minimize "h", "optimize" calls "h" with different values of x. In particular, at the end of the optimization, "h" would be called with argument x.min, the minimizer of h(x). Therefore, buried somewhere, there has to be a call to "g" with argument x=x.min which I would like to retrieve in order to avoid the extra call to "g" in the line before the return. Can this be done without too much pain? I'd very much appreciate any help. Juan Pablo Lewinger Department of Preventive Medicine University of Southern California
Gabor Grothendieck
2006-Sep-13 00:48 UTC
[R] Retrieving value computed in inner function call
Check out: http://finzi.psych.upenn.edu/R/Rhelp02a/archive/83547.html On 9/12/06, Juan Pablo Lewinger <lewinger at usc.edu> wrote:> Dear R users, > > Consider the following example function: > > f = function(a,b) { > g = function(x) a*x + b > h = function(x) g(x)^2 + x^2 > opt = optimize(h,lower = -1, upper = 1) > x.min = opt$minimum > h.xmin = opt$objective > g.xmin = g(x.min) > return(c(x.min, h.xmin, g.xmin)) > } > > In my real problem the function that plays the role of "g" is costly > to compute. Now, to minimize "h", "optimize" calls "h" with different > values of x. In particular, at the end of the optimization, "h" would > be called with argument x.min, the minimizer of h(x). Therefore, > buried somewhere, there has to be a call to "g" with argument x=x.min > which I would like to retrieve in order to avoid the extra call to > "g" in the line before the return. Can this be done without too much pain? > > I'd very much appreciate any help. > > > > Juan Pablo Lewinger > Department of Preventive Medicine > University of Southern California > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Though not obvious at first the posting you pointed me too is very helpful indeed. Thanks a lot Gabor. Juan Pablo At 08:48 PM 9/12/2006 -0400, Gabor Grothendieck wrote:>Check out: > >http://finzi.psych.upenn.edu/R/Rhelp02a/archive/83547.html > >On 9/12/06, Juan Pablo Lewinger <lewinger at usc.edu> wrote: >>Dear R users, >> >>Consider the following example function: >> >>f = function(a,b) { >> g = function(x) a*x + b >> h = function(x) g(x)^2 + x^2 >> opt = optimize(h,lower = -1, upper = 1) >> x.min = opt$minimum >> h.xmin = opt$objective >> g.xmin = g(x.min) >> return(c(x.min, h.xmin, g.xmin)) >>} >> >>In my real problem the function that plays the role of "g" is costly >>to compute. Now, to minimize "h", "optimize" calls "h" with different >>values of x. In particular, at the end of the optimization, "h" would >>be called with argument x.min, the minimizer of h(x). Therefore, >>buried somewhere, there has to be a call to "g" with argument x=x.min >>which I would like to retrieve in order to avoid the extra call to >>"g" in the line before the return. Can this be done without too much pain? >> >>I'd very much appreciate any help. >> >> >> >>Juan Pablo Lewinger >>Department of Preventive Medicine >>University of Southern California >> >>______________________________________________ >>R-help at stat.math.ethz.ch mailing list >>https://stat.ethz.ch/mailman/listinfo/r-help >>PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >>and provide commented, minimal, self-contained, reproducible code.