Achim Gratz <strom...@nexgo.de> writes:

> Eric Schulte writes:
>> I prefer leaving the hash with the results, as it is the results which
>> are "hashed".  Also, same input does not always guarantee same output,
>> e.g.,
>>
>> #+begin_src sh
>>   date
>> #+end_src
>
> That's not what I'm seeing, but I may be missing something again.  The
> hash is for the parameters of the call, not the result.  If I'm editing
> the result, Babel still marks the cache valid and does not re-compute
> it.  It does re-compute if I change the parameters explicitly or
> implicitly, even if the result will not change.
>

A hash marks a *result* with an indication of what was used to generate
it (code block & parameters).  The point of a hash is to allow the
result to be returned without having to re-execute.  For this reason, I
think that the hash should live with the result.  In general a hash
without a result doesn't make sense (because then what is cached?).

If one did want to move hashes to code blocks it would be a major
refactoring which would (in my opinion) require significant
justification.

As I understand this particular case, the OP is using a hash not to mark
a result as up to date, but rather to mark a side effect (loading data
into R) as having taken place.  I think this is a misuse of a cache.

What if the R process restarts?  The hash would still be valid, but the
side effects have been lost.  I think a better approach would be to
implement the logic in R required to check if data is present and
conditionally load it if not.  Then simply re-run this conditional
reloading code in full every time.

It is very possible I've missed something.

I hope these comments are helpful.

Best,

-- 
Eric Schulte
http://cs.unm.edu/~eschulte

Reply via email to