[R] Possible bug in optimize (related to naming the arguments)
Peter Dalgaard
pd@|gd @end|ng |rom gm@||@com
Thu May 7 16:14:52 CEST 2020
Partial matching is a feature regretted by its designer, but is not really possible to remove at this point. One early change in R relative to S was to require full match of anything after "...", but as you have noticed, that does not apply for interval=
So, "don't do that, then"
-pd
> On 7 May 2020, at 16:00 , Ege Rubak <rubak using math.aau.dk> wrote:
>
> Dear Søren,
>
> I suspect that the good R souls wouldn't consider this a bug, but a
> logical consequence of the R language design. It is of course a valid
> question whether this should be explicitly mentioned in documentation.
>
> If I recall correctly about function evaluation: First all named
> arguments are found by partial matching, so in your example you are
> really providing the value 1/3 for the argument `interval` which is a
> user mistake. The exact same things happens for the apply family, e.g.
>
>> myfun <- function(x, F) x-F
>> sapply(1:3, myfun, F = 1)
> Error in match.fun(FUN) : '1' is not a function, character or symbol
>
> It works fine if we provide a valid value for the argument `FUN` rather
> than the constant value `FUN = 1`:
>
>> sapply(1:3, FUN = myfun, F = 1)
> [1] 0 1 2
>
> (I realize no sane person would use the argument name `F` in this case,
> but you get the point.)
>
> Best,
> Ege
>
> On Thu, 2020-05-07 at 13:42 +0000, Søren Højsgaard wrote:
>> Dear all,
>>
>> I am wondering if there is a minor bug in the optimimize function;
>> please see below:
>>
>>
>> ---
>>
>>
>>> ## example taken from optimize documentation
>>> f <- function (x, a) (x - a)^2
>>> xmin <- optimize(f, c(0, 1), tol = 0.0001, a = 1/3)
>>> xmin
>>
>> $minimum
>> [1] 0.3333333
>>
>> $objective
>> [1] 0
>>
>>> ## if we change argument a to j things still work fine
>>> f2 <- function (x, j) (x - j)^2
>>> xmin2 <- optimize(f2, c(0, 1), tol = 0.0001, j = 1/3)
>>> xmin2
>>
>> $minimum
>> [1] 0.3333333
>>
>> $objective
>> [1] 0
>>
>>> ## if we change argument a to i things fail
>>> f3 <- function (x, i) (x - i)^2
>>> xmin3 <- optimize(f3, c(0, 1), tol = 0.0001, i = 1/3)
>>
>> Error in optimize(f3, c(0, 1), tol = 1e-04, i = 1/3) :
>> 'xmin' not less than 'xmax'
>>> xmin3
>>
>> $minimum
>> [1] 0.3333333
>>
>> $objective
>> [1] 0
>>
>>> ##Same here
>>> xmin3 <- optimize(f3, lower=0, upper=1, tol = 0.0001, i = 1/3)
>>
>> Error in f(arg, ...) (from #1) : argument "i" is missing, with no
>> default
>>> xmin3
>>
>> $minimum
>> [1] 0.3333333
>>
>> $objective
>> [1] 0
>>
>>> ## a workaround is
>>> xmin3 <- optimize(f3, interval=c(0, 1), tol = 0.0001, i = 1/3)
>>> xmin3
>>
>> $minimum
>> [1] 0.3333333
>>
>> $objective
>> [1] 0
>>
>> ---
>>
>> the problem is, I guess, due to the keyword 'interval' gets mixed
>> up with 'i'.
>>
>> Has anyone experienced that?
>>
>> Best regards
>> S�ren
>>
>>
>>
>> [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> 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.
> --
> Ege Rubak, Associate Professor,
> Department of Mathematical Sciences, Aalborg University
> Skjernvej 4A, 9220 Aalborg East, Denmark
> Phone: (+45)99408861
> Mobile: (+45)30230252
> Email: rubak using math.aau.dk
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
--
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk Priv: PDalgd using gmail.com
More information about the R-help
mailing list