When a function is being called with the same object, as opposed to an object which is equal but located somewhere else in memory, there should be a way to avoid the calculation of the checksum or hash. I don't know how to do it, but I have some immutable 100MB objects and it seems like I'm mostly waiting for a checksum to be calculated.
I don't know if the semantics of weak references in R allows us to ensure that a weakly-referenced object has not been modified, but if so then this could be turned into a solution for making Memoise fast for large objects too.