Skip to content

Hash table...

3 messages · Worik R, Philipp Pagel, Duncan Murdoch

#
On Thu, Apr 14, 2011 at 06:44:53PM +1200, Worik R wrote:
If y is an integer, factor or string you could try something along these
lines:

cache <- list()
y <- 12
cache[[as.character(y)]] <- sqrt(y)
y<-98
cache[[as.character(y)]] <- sqrt(y)
cache

$`12`
[1] 3.464102

$`98`
[1] 9.899495

Of course this can get you in trouble if y is a floating point
number because of the issues with "identity" of such numbers, as
discussed in ?all.equal and FAQ 7.31 "Why doesn't R think these
numbers are equal?".

cu
	Philipp
#
On 11-04-14 4:48 AM, Philipp Pagel wrote:
I haven't actually done timing, but if there are likely to be a lot of y 
values, I'd expect an environment created with hash=TRUE to be faster, 
both in adding new items and in retrieving existing ones.  The code is 
pretty similar:

Use

cache <- new.env(hash=TRUE)

to create it, and

ls(cache)

to list the names, or

as.list(cache)

to print it as a list.  Other than that, the assignment and retrieval 
code is identical.

Duncan Murdoch