[Rd] control list gotcha

2011-09-10 Thread John C Nash
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 (I'm 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.

Best,

JN

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] control list gotcha

2011-09-10 Thread Gabor Grothendieck
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