Skip to content
Prev 106762 / 398506 Next

wrapping mle()

It is much cleaner to do this sort of thing with lexical scope.  For
example,

     mkll <- function(x, y) {
        function(ymax=15, xhalf=6) {
           -sum(stats::dpois(y, lambda=ymax/(1+x/xhalf), log=TRUE))
        }
     }

creates a log-likelihood likelyhood function for data x,y that can
then be used by

     fit.mle <- function(mkfun, x, y) {
         loglik.fun <- mkfun(x, y)
         mle(loglik.fun, method="L-BFGS-B", lower=c(0, 0))
     }

as in


     > fit.mle(mkll, x=0:10, y=c(26, 17, 13, 12, 20, 5, 9, 8, 5, 4, 8))

     Call:
     mle(minuslogl = loglik.fun, method = "L-BFGS-B", lower = c(0,
         0))

     Coefficients:
          ymax     xhalf
     24.999420  3.055779

It is not clear why you want to be able to pass ll as a character
string or why you want to assume that the thing passed in will refer
to variables named 'x' and 'y', both usually bad ideas, so this
specific approach may not apply, but something variant should.

The ability to use environment(f)<-env to change the environment of a
function is one of the most dubious language features of R (maybe the
most dubious, though there are a couple of other strong contenders)
and should not be used except in very rare circumstances.

Best,

luke
On Sat, 30 Dec 2006, Gabor Grothendieck wrote: