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