Re: [Rd] control list gotcha

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sat, 10 Sep 2011 13:08:59 -0400

On Sat, Sep 10, 2011 at 12:31 PM, John C Nash <nashjc_at_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_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Received on Sat 10 Sep 2011 - 17:11:39 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Sat 10 Sep 2011 - 17:20:29 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive