[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