On Sat, Sep 10, 2011 at 12:31 PM, John C Nash nas...@uottawa.ca wrote:
This is mainly a reminder to others developing R packages to be careful not
to supply
control list items that are not used by the called package. Optimx is a
wrapper package
that aims to provide a common syntax to a number of existing optimization
packages.
Recently in extending optimx package I inadvertently introduced a new control
for optimx
which is NOT in any of the wrapped optimization packages. There are probably
other methods
of keeping things tidy, but I copy the control list and null out unwanted
elements for
each of the called packages. I missed this in a couple of places in the
R-forge
development version of optimx (Iam working on fixing these, but they are
still there at
the moment).
The nasty here was that the package mostly works, with plausible but not
very good
results for some of the optimizers. If it crashed and burned, it would have
been noticed
sooner. There is also a potential interaction with a use of the dot-dot-dot
variable to
pass scaling information.
If there are ideas on how to quickly reveal errors related to calling
sequences involving
control lists and ..., I'd welcome them (off-list?), and be prepared to
summarize
findings in a vignette.
Suppose we wish to call f with the control.list components plus
those in the default.args not already specified in the control.list.
If any such arg is not an arg of f exclude it:
# test data - f, default.args and control.list
f - function(a, b, c = 0, d = 1) print(match.call())
default.args - list(a = 2, b = 1)
control.list - list(a = 1, d = 2, e = 3)
# override default.args with control.list
use.args - modifyList(default.args, control.list)
# exclude components of use.args that are not args of f
sel - names(use.args) %in% names(as.list(args(f)))
final.args - use.args[sel]
# run f
do.call(f, final.args)
The last line gives:
do.call(f, final.args)
f(a = 1, b = 1, d = 2)
--
Statistics Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com
__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel