[R] hash or other quick lookup function?

Esmail Bonakdarian esmail.js at gmail.com
Wed May 28 12:26:01 CEST 2008


Hi Duncan,

Duncan Murdoch wrote:
> Duncan Murdoch wrote:
>> Esmail Bonakdarian wrote:
>>  
>>> Hello all,
>>>
>>> I have a matrix of bit values.
>>>
>>> I compute certain values based on the bits in each row. There may be
>>> *duplicate* entries in the matrix, ie several rows may be identical.
>>> These rows change over time, and identical entries may not be next to
>>> each other.
>>>
>>> Computing these values is time consuming, so I would like a way to 
>>> store a value once it's computed. That way I would be able to look up the value
>>> based on a given bitstring (row in the matrix) and avoid having to 
>>> re-compute the same value.
>>>
>>> So, my thought is a hash function based on a bit string - does R have such
>>> a thing? Or is there an alternative approach that would do the same in R?
>>> The lookup should be quick, otherwise the gains from avoiding
>>> recomputing identical values would be lost to some extent.
>>
>> Environments can be hashed. To use this, you'd convert the bit string 
>> into a character string, and use that as the name of a variable in an 
>> environment.
>>
>> For example,
>>
>> cache <- new.env(hash=TRUE, parent=emptyenv())
>>  ...
>> bits <- '0101'
>> if (exists(bits, cache)) {
>>   return(get(bits, cache))
>> } else {
>>   value <- long.computation()
>>   assign(bits, value)
>>   
> 
> Whoops, that assignment should have been in the cache:
> 
>        assign(bits, value, envir=cache)
>>   return(value)
>> }


Thank you for posting this, I'll have to give it a try.
If I can get this to work it should save some some time
spent on recomputing values.

(Sorry for the delayed reply, I was traveling for the
whole last day - suffering from some reverse jet lag at
the moment :-)

Can anyone else think of other alternatives? Always happy
to learn something new.

Thanks!

Esmail

ps: do you think the conversion to a character string
     before comparison/search will cause a noticeable
     performance hit? I still lack an intuitive feel for
     R the programming language. I'd have more of an idea
     with regular high-level programming languages.

>>
>> Duncan Murdoch



More information about the R-help mailing list