# [Rd] Re: [R] constrOptim and function with additional parameters? (PR#7088)

From: <dmurdoch_at_pair.com>
Date: Thu 15 Jul 2004 - 00:25:16 EST

On Wed, 14 Jul 2004 10:01:45 -0400, "Roger D. Peng" <rpeng@jhsph.edu> wrote :

I don't know of other cases where we edit the "..." list before passing it onwards. Are there any?

>
> > constrOptim
>function (theta, f, grad, ui, ci, mu = 1e-04, control = list(),
>outer.iterations = 10
>0,
> outer.eps = 1e-05, ...)
>{
> if (!is.null(control\$fnscale) && control\$fnscale < 0)
> mu <- -mu
> [...]
> obj <- f(theta)
> ^^^^^^^^^^^^^^^
> r <- R(theta, theta)
> for (i in 1:outer.iterations) {
> obj.old <- obj
> r.old <- r
> [...]
>}
>
>So the object function `f' is called on the starting value `theta' but
>the `...' is not passed through.
>
>-roger
>
>Duncan Murdoch wrote:
>> On Wed, 14 Jul 2004 14:59:01 +0200 (MEST), "Marlene Mueller"
>> <Marlene.Mueller@gmx.de> wrote :
>>
>>
>>>How can I use a function with some additional input parameters
>>>in constrOptim? For example, something like
>>>
>>>fr <- function(x,a) { ## Rosenbrock Banana function
>>> x1 <- x[1]
>>> x2 <- x[2]
>>> a * (x2 - x1 * x1)^2 + (1 - x1)^2
>>>}
>>>
>>>where the optimum is to be found w.r.t. x. Calling
>>>optim(c(-1.2,1), fr, NULL, a=100) works as expected, but I fail
>>>to provide the a=100 in the constrained case:
>>>
>>>
>>>> constrOptim(c(-1.2,0.9), fr, NULL, ui=rbind(c(-1,0),c(0,-1)),
>>>
>>>ci=c(-1,-1),a=100)
>>>Error in f(theta) : Argument "a" is missing, with no default
>>>
>>>Is this a bug or is there a different solution that I miss here?
>>
>>
>> I can't spot why your use of constrOptim isn't working, but you should
>> be able to workaround it by doing something like this:
>>
>> applyDefaults <- function(fn, ...) {
>> function(x) fn(x, ...)
>> }
>>
>> constrOptim(c(-1.2,0.9), applyDefaults(fr, a=100), NULL,
>> ui=rbind(c(-1,0),c(0,-1)),ci=c(-1,-1))
>>
>> The applyDefaults function creates a new function which evaluates the
>> old one with some of the parameters set to fixed values.
>>
>> Duncan Murdoch
>>
>> ______________________________________________
>> R-help@stat.math.ethz.ch mailing list
>>
https://www.stat.math.ethz.ch/mailman/listinfo/r-help