From rdpeng at gmail.com  Tue Oct 16 22:59:59 2007
From: rdpeng at gmail.com (Roger Peng)
Date: Tue, 16 Oct 2007 16:59:59 -0400
Subject: [Rd] Fwd: Digest package - make digest generic?
In-Reply-To: <f8e6ff050710161322g69214d7dv9fa4672280404e9c@mail.gmail.com>
References: <f8e6ff050710150751r5d9add21sdb3ebccdb93ed085@mail.gmail.com>
	<18195.34181.782782.49558@ron.nulle.part>
	<59d7961d0710151300i1aed80adx448642f6161b3d29@mail.gmail.com>
	<f8e6ff050710151348x8888784lc6e5c5b5cf7e2bd@mail.gmail.com>
	<59d7961d0710151405w1b78c2bl81f08da87e62207e@mail.gmail.com>
	<66f3bd910710160524g3ef0f207h30f5f6bdf2880110@mail.gmail.com>
	<66f3bd910710160525o697104a8y90e9c8bf4c3255d1@mail.gmail.com>
	<18197.781.298239.228245@ron.nulle.part>
	<66f3bd910710161300w1857acd9gfdd038c389077dec@mail.gmail.com>
	<f8e6ff050710161322g69214d7dv9fa4672280404e9c@mail.gmail.com>
Message-ID: <66f3bd910710161359t4a1580ecl9bc2ec1191560cd7@mail.gmail.com>

Calling 'digest.default' directly would not be possible if the method
were hidden in a namespace (without resorting to some maneuvering).
To force the default method I think you'd need to 'unclass' the
object.

I'm not against making 'digest' generic, but I'd prefer it if there
were a guaranteed way to compute the digest of the "raw"/full object
without having to wonder about class-specific behavior.  Something
like:

digest0 <- [[the current 'digest' function]]
digest <- function(object, ...) UseMethod("digest")
digest.default <- function(object, ...) digest0(object, ...)

As I think we've seen in this discussion already, what is surprising
to one person may not be surprising to another (and vice versa) so
having something like 'digest0' which is consistent across all R
objects would be useful.

-roger

On 10/16/07, hadley wickham <h.wickham at gmail.com> wrote:
> On 10/16/07, Roger Peng <rdpeng at gmail.com> wrote:
> > My understanding was that Hadley wanted 'digest' to operate on part of
> > an object rather than on the entire, which might contain uninteresting
> > or irrelevant details.  For example, if we had
> >
> > a <- structure(list(x = 1, y = 2), class = "foo")
> > b <- structure(list(x = 2342342, y = 2), class = "foo")
> >
> > digest.foo <- function(object, ...) digest(object$y)
>
> Yes, that's exactly what I want, except in my case my objects contain
> about 20 or 30 bits of information that are irrelevant (I'm my case
> documentation about the class and other functions), so it would be
> surprising if p1 and p2 which produced identical plots gave different
> digests.
>
> If you want the default behaviour, you could always call
> digest.default to digest the entire object.
>
> Hadley
>


-- 
Roger D. Peng  |  http://www.biostat.jhsph.edu/~rpeng/



[Rd] Fwd: Digest package - make digest generic?
Roger Peng