[R] Use of ellipses ... in argument list of optim(), integrate(), etc.

Tony Plate tplate at acm.org
Thu Mar 13 18:19:33 CET 2008


Ravi Varadhan wrote:
> Hi,
> 
> I have noticed that there is a change in the use of ellipses or . in R
> versions 2.6.1 and later.  In versions 2.5.1 and earlier, the . were always
> at the end of the argument list, but in 2.6.1 they are placed after the main
> arguments and before method control arguments.  This results in the user
> having to specify the exact (complete) names of the control arguments, i.e.
> partial matching is not allowed.  
> 
> An example with integrate() : 
> 
>> integrate(function(x) exp(-x^2), lower=-Inf, upper=L, subdiv=1000)
> 
> Error in f(x, ...) : unused argument(s) (subdiv = 1000)
> 
>> integrate(function(x) exp(-x^2), lower=-Inf, upper=L, subdivisions=1000)
> 
> 1.633051 with absolute error < 1.6e-06
> 
> Here is an example with optim():
> 
>> res <- optim(50, fw, meth="BFGS", control=list(maxit=20000, temp=20,
> parscale=20)) 
> 
> Error in fn(par, ...) : unused argument(s) (meth = "BFGS")
> 
> FYI, I am using R version 2.6.1 on Windows XP.
> 
> May I ask what the rationale behind this change is and also about the pros
> and cons of the two different ways of specifying (.)?

Putting optim() arguments after the ... disallows the use of abbreviated 
actual arguments for optim().  This is generally a good thing, because 
prior to this change, it was impossible to supply, via the '...' arguments 
of optim(), an argument to fn() whose name was a prefix of one of the 
arguments of optim().  E.g., if your function had a argument named 'm', you 
could not previously supply it via the '...' argument of optim(), because 
if you did something like optim(x, fun, m=240), intending 'm' to be passed 
to 'fun', the 'm' would instead match the 'method' argument of optim().

The cons of the new argument structure are that abbreviations for names of 
arguments of optim() can't be used (a minor and debatable con), and that 
previous code that used abbreviations might break, but it will likely break 
quickly and noisily, so it's not too bad (the only case where it wouldn't 
break is when fn has a '...' argument itself, and it ignores unrecognized 
components, or where the are other argument name collisions).

-- Tony Plate

> 
>  
> 
> Thank you very much.
> 
>  
> 
> Best,
> 
> Ravi.
> 
>  
> 
> ----------------------------------------------------------------------------
> -------
> 
> Ravi Varadhan, Ph.D.
> 
> Assistant Professor, The Center on Aging and Health
> 
> Division of Geriatric Medicine and Gerontology 
> 
> Johns Hopkins University
> 
> Ph: (410) 502-2619
> 
> Fax: (410) 614-9625
> 
> Email: rvaradhan at jhmi.edu
> 
> Webpage:  http://www.jhsph.edu/agingandhealth/People/Faculty/Varadhan.html
> 
>  
> 
> ----------------------------------------------------------------------------
> --------
> 
>  
> 
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list