Carles Bretó MartÃnez
2018-Jun-22 18:31 UTC
[Rd] bug in 'optim' documentation : "Brent" method doesn't copy 'par' names
The optim documentation states (second from last sentence of Details Section)
that "Any names given to par will be copied to the vectors passed to
\code{fn} and \code{gr}." This does not seem to be the case when the method
argument is set to "Brent".
Consider finding an optimum with the "Brent" method and a fn argument
that does not rely on a named par argument, e.g.,
> quad <- function (x) x^2 + x
> par <- -0.75
> x <- optim(par = par, method = "Brent", lower = -1, upper = 0,
fn = quad)
> x$par
[1] -0.5> x$value
[1] -0.25
However, if the fn argument relies in the names in par, this optimum might not
be achieved, e.g.,
> names(par) <- "par_name"
> par
par_name
-0.75 > named <- function (x) if (length(names(x)) > 0) quad(x) else 123.456
> y <- optim(par = par, method = "Brent", lower = -1, upper = 0,
fn = named)
> y$par
[1] -6.474096e-09> y$value
[1] 123.456
The y$value suggests that the names of par are not being "copied to the
vectors passed to \code{fn}." Note the lack of> warnings()
>
> sessionInfo()
R version 3.5.0 (2018-04-23)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.5 LTS
Matrix products: default
BLAS: /usr/lib/atlas-base/atlas/libblas.so.3.0
LAPACK: /usr/lib/lapack/liblapack.so.3.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.5.0>
> proc.time()
user system elapsed
0.328 0.056 0.443
