[Rd] caching frequently used values

Tamas K Papp tpapp at Princeton.EDU
Thu Dec 14 00:18:40 CET 2006


On Wed, Dec 13, 2006 at 03:05:46PM -0800, Robert Gentleman wrote:

> e1 = new.env(hash=TRUE)
> 
> e1[["1"]] = whateveryouwant
> 
> ie. just transform to characters, but I don't see why you want to do 
> that - surely there are more informative names to be used -

Because they are derivatives, and best indexed by numbers.  I wrote an
example to demonstrate what I think the solution is (for memoizing
powers of numbers).  It works, but I am not an experienced programmer:
can you please look at it to check that I do things right and do not
abuse any feature of R?

## memoize powers of integers

createpowerlist <- function(n) {
  list(n=n,env=new.env(hash=TRUE))
}

getpower <- function(powerlist,i) {
  iname <- as.character(i)
  if (exists(iname,powerlist$env))
    get(iname,powerlist$env)
  else {
    res <- i^powerlist$n                # result
    assign(iname,res,powerlist$env)
    res
  }
}

cubelist <- createpowerlist(3)
exists("12",cubelist$env)               # FALSE
getpower(cubelist,12)                   # 1728
exists("12",cubelist$env)               # TRUE


Thanks,

Tamas



More information about the R-devel mailing list