From tplate at acm.org  Wed Aug 13 18:35:44 2008
From: tplate at acm.org (Tony Plate)
Date: Wed, 13 Aug 2008 10:35:44 -0600
Subject: [Rd] messing with ...
In-Reply-To: <48A3019E.5080209@zoology.ufl.edu>
References: <48A3019E.5080209@zoology.ufl.edu>
Message-ID: <48A30D60.2020304@acm.org>

Ben Bolker wrote:
>
>   I'm looking for advice on manipulating parameters that
> are going to be passed through to another function.
>
>   Specifically, I am working on my version of "mle",
> which is a wrapper for optim (among other optimizers).
> I would prefer not to replicate the entire argument
> list of optim(), so I'm using ... to pass extra arguments
> through.
>
>   However:
>     the starting values are specified as a list,
> which means that users can potentially specify them
> in any order (or at least that's the way it works
> now -- one solution to the problem I'm about to state
> is to insist that they specify the parameters in the
> same order as they are given in the arguments of
> the objective function).
>   However, there are other arguments (lower, upper,
> control$parscale, control$ndeps) that should all
> be in the same order as the objective function
> definition by the time they get to optim()).  I can
> think of a few solutions:
>
>  (1) make the user specify them all in the right order (ugh)
>  (2) add all of them as explicit parameters to my function
> so that I can rearrange them appropriately (ugh)
>  (3) mess with the ... argument before it gets passed
> through to optim (impossible?)
>  (4) capture ... as arglist <- list(...), manipulate the arguments
> as necessary, then pass them along to optim as
> do.call("optim",arglist) (ugh but maybe the best solution?)
>
>   any thoughts?
here's my two cents:
- require names on parameters, rather than order
- construct calls and use eval() rather than do.call() (then you can 
manipulate list(...) without the ugh factor of do.call() -- though is 
do.call() any different to eval() in R? -- I know in S-PLUS that the use 
of do.call() can completely blow out memory usage)
- to avoid manually duplicating arg lists, use constructs like 
names(formals(optim)) and pmatch to find args that below to the 
optimizer function vs the objective function

-- Tony Plate
>
>  thanks
>
>   Ben Bolker
>
>
> ------------------------------------------------------------------------
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



[Rd] messing with ...
Tony Plate