I have a couple of ideas - serialize() can store references (and some simple assignment are just stored as references until one tries to modify part of the copy, i.e. in a copy-on-write manner); ocassionally, it will also store the package name as an attribute to the class name in which the class was defined. Maybe neither of this is the case, but what does a hexdump tell you? (just printing the result of rawToChar() to the console).
Henrik Bengtsson wrote: > Forgot... > > On 8/31/07, Henrik Bengtsson <[EMAIL PROTECTED]> wrote: >> Hi, >> >> I am puzzled with serialize(). It comes down generating identical >> hash codes for (apparently) identical objects using digest::digest(), >> which in turn relies on serialize(). Here is an example illustration >> the issue: >> >> ser <- function(object, ...) { >> list( >> names = names(object), >> namesRaw = charToRaw(names(object)), >> ser = serialize(names(object), connection=NULL, ascii=FALSE) >> ) >> } # ser() >> >> # Object to be serialized >> key <- key0 <- list(abc="Hello"); >> >> # Store results >> d <- list(); >> >> # 1. As is >> d[[1]] <- ser(key); >> >> # 2. Set names and redo (hardwired: identical to what's already there) >> names(key) <- "abc"; >> d[[2]] <- ser(key); >> >> # 3. Set names and redo (generic: char->raw->char) >> key <- key0; >> names(key) <- sapply(names(key), FUN=function(name) >> rawToChar(charToRaw(name))); >> d[[3]] <- ser(key); >> >> # All names are identical >> for (kk in 2:length(d)) >> stopifnot(identical(d[[1]]$names, d[[kk]]$names)); >> >> # All raw names are identical >> for (kk in 2:length(d)) >> stopifnot(identical(d[[1]]$namesRaw, d[[kk]]$namesRaw)); >> >> # But, the serialized names differ. >> print(identical(d[[1]]$ser, d[[2]]$ser)); >> print(identical(d[[1]]$ser, d[[3]]$ser)); >> print(identical(d[[2]]$ser, d[[3]]$ser)); > > With R version 2.6.0 Under development (unstable) (2007-08-23 r42614) I get: > [1] TRUE > [1] FALSE > [1] FALSE > > and with R version 2.5.1 Patched (2007-07-19 r42284): > [1] FALSE > [1] FALSE > [1] TRUE > >> So, it seems like there is some extra information in the names >> attribute that is part of the serialization. Is it possible to show >> they differ at the R level? What is that extra information? >> Promises...? >> >> Please enlighten me. >> >> Henrik >> > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel