[R] Optim stripping attributes from relistable objects

Katharine Mullen kate at few.vu.nl
Mon Aug 18 00:15:45 CEST 2008


>
> The following code is inspired by the help file for the relist()
> function (see?relist), which explicitly details how you can use a

The example is in the 'Details' section and, indeed, it looks like it no
longer works.

> relistable object in conjunction with optim to pass and reconstruct
> complex parameter structures/groupings. The idea is that the optim()
> function can only work with vectors, but in many cases you would like
> to use a complex structure inside the objective function- relist is
> one way to do that. The problem is that optim appears to be stripping
> the attributes and therefore the example doesn't seem to run, giving
> the error at the bottom.

You can get around this by specifying skeleton for relist:

rb.banana <- function(params) {
    params <- relist(params, skeleton=list(x=NA,y=NA))
    return( (1-params$x)^2 + 100*(params$y - params$x^2)^2)
}

ipar <-  as.relistable(list(x=5,y=0))

initial.params <- unlist(ipar)

xx <- optim(unlist(initial.params), rb.banana)

>
> > rb.banana <- function(params) {
> +   #Params is initially a vector
> +   cat("Params initially has the attributes:\n")
> +   print(names(attributes(params)))
> +   #Relisting it turns it into a list...
> +   params <- relist(params)
> +   cat("---------\n")
> +   #..which can then be called in the standard list manner
> +   return( (1-params$x)^2 + 100*(params$y - params$x^2)^2)
> + }
> >
> > ipar            <-  as.relistable(list(x=5,y=0))
> > initial.params  <-  unlist(ipar)
> >
> > #Test to see if rb.banana works properly in the "normal" case
> > rb.banana(initial.params)
> Params initially has the attributes:
> [1] "names"    "skeleton"
> ---------
> [1] 62516
> >
> > #OK, that's good. How about with optim though?
> > optim(initial.params,rb.banana)
> Params initially has the attributes:
> [1] "names"
> Error in relist(params) :
>   The flesh argument does not contain a skeleton attribute.
> Either ensure you unlist a relistable object, or specify the skeleton
> separately.
> >
>
> What's going on here? Has this functionality been removed and the
> documentation in relist() not updated? Or has the feature been broken?
> Or have I misinterpreted something here (it wouldn't be the first
> time!!)
>
> Am running R version 2.7.1 (2008-06-23) under windows.
>
> Cheers,
>
> Mark
>
> ______________________________________________
> 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