[R] Age of an object?

Duncan Temple Lang duncan at wald.ucdavis.edu
Wed Dec 14 15:37:27 CET 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1



Roger Bivand wrote:
> On Wed, 14 Dec 2005, Martin Maechler wrote:
> 
> 
>>>>>>>"Kjetil" == Kjetil Brinchmann Halvorsen <kjetilbrinchmannhalvorsen at gmail.com>
>>>>>>>    on Wed, 14 Dec 2005 08:59:24 -0400 writes:
>>
>>    Kjetil> Philippe Grosjean wrote:
>>    >> Martin Maechler wrote:
>>    >>>>>>>> "Trevor" == Trevor Hastie <hastie at stanford.edu>
>>    >>>>>>>> on Tue, 13 Dec 2005 12:51:34 -0800 writes:
>>    >>> 
>>    Trevor> It would be nice to have a date stamp on an object.  
>>
>>    Kjetil> Following up on my post of a few minutes ago, I tried to write an
>>    Kjetil> timestamp function
>>
>>    Kjetil> timestamp <- function(obj, moretext){
>>    Kjetil> comment(obj) <<- paste(Sys.time(), moretext, sep="\n")
>>    Kjetil> }
>>
>>    Kjetil> but this does'nt work.
>>
>>    >> myobj <- 1:10
>>    >> timestamp(myobj, "test")
>>    Kjetil> Error in timestamp(myobj, "test") : object "obj" not found
>>    >> 
>>
>>Instead, I'd **strongly** recommend to define *two* functions,
>>one "constructor" and one "inspector" :
>>
>>"timestamp<-" <- function(obj, value) {
>>    stamp <- paste(Sys.time(), value)
>>    ## attr(obj,"timestamp") <- stamp
>>    comment(obj) <- stamp
>>    obj
>>}
> 
> 
> This does treat any existing comment rather brutally, could stamp rather 
> be:
> 
>     stamp <- paste(Sys.time(), comment(obj), value)
> 
> probably enhanced with some field separators to let the inspector grab 
> just its chunk? Something like DCF?


Why not use a regular named vector/list rather than pasting things into
and then back from a string, relying on conventions and losing
information.

   current <- comment(obj)
   current[["timeStamp"]] <- Sys.time()
   comment(x) <- current

and then the individual elements can be accessed in the usual manner
   comment(x)[["timeStamp"]]
and the original value can be be maintained (with a little more
tinkering for old-style cases without named elements).


> 
> 
>>## and
>>
>>timestamp  <- function(obj) {
>>    ## attr(obj,"timestamp")
>>    comment(obj)
>>}
>>
>>## and the usage (shown with output)
>>
>>myobj <- 1:9
>>timestamp(myobj) <- "as an example"
>>
>>myobj
>>## 1 2 3 4 5 6 7 8 9
>>timestamp(myobj)
>>## "2005-12-14 14:57:33 as an example"
>>
>>-------
>>
>>we had mentioned recently here that "good programming style"
>>works with functions that do *not* modify other objects but
>>rather *return*..
>>
>>
>>
>>    >>> 
>>    Trevor> In S/Splus this was always available, because objects were files.
>>    >>> 
>>    >>> [are you sure about "always available"? 
>>    >>> In any case, objects were not single files anymore for a
>>    >>> long time, at least for S+ on windows, and AFAIK also on
>>    >>> unixy versions recently ]
>>    >>> 
>>    >>> This topic has come up before.
>>    >>> IIRC, the answer was that for many of us it doesn't make sense
>>    >>> most of the time: 
>>    >> 
>>    >> I remember it was discussed several times. I don't remember why it was 
>>    >> considered too difficult to do.
>>    >> 
>>    >>> If you work with *.R files ('scripts') in order to ensure
>>    >>> reproducibility, you will rerun -- often source() -- these files,
>>    >>> and the age of the script file is really more interesting.
>>    >>> Also, I *always* use the equivalent of  q(save = "no") and
>>    >>> almost only use save() to particularly save the results of
>>    >>> expensive  computations {often, simulations}.
>>    >> 
>>    >> OK, now let me give examples where having such an information would ease 
>>    >> the work greatly: you have a (graphical) view of the content of an 
>>    >> object (for instance, the one using the "view" button in R commander), 
>>    >> or you have a graphical object explorer that has a cache to speed up 
>>    >> display of information about objects in a given workspace (for instance, 
>>    >> the SciViews-R object explorer). What a wonderful feature it will be to 
>>    >> tell if an object was changed since last query. In the view, one could 
>>    >> have a visual clue if it is up-to-date or not. In the object explorer, I 
>>    >> could update information only for objects that have changed...
>>    >> 
>>    Trevor> I have looked around, but I presume this information is not available.
>>    >>> 
>>    >>> I assume you will get other answers, more useful to you, which
>>    >>> will be based on a class of objects which carry an
>>    >>> 'creation-time' attribute.  
>>    >> 
>>    >> Yes, but that would work only for objects designed that way, and only if 
>>    >> the methods that manipulate that object do the required housework to 
>>    >> update the 'last-changed' attribute (the question was about last access 
>>    >> of an object, not about its creation date, so 'last-changed' is a better 
>>    >> attribute here). If you access the object directly with, let's say, 
>>    >> myobject at myslot <- newvalue, that attribute is not updated, isn't it?
>>    >> 
>>    >> Best,
>>    >> 
>>    >> Philippe Grosjean
>>    >> 
>>    >>> Martin Maechler, ETH Zurich
>>    >>>
>>
>>______________________________________________
>>R-help at stat.math.ethz.ch mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-help
>>PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>>
> 
> 

- --
Duncan Temple Lang                duncan at wald.ucdavis.edu
Department of Statistics          work:  (530) 752-4782
371 Kerr Hall                     fax:   (530) 752-7099
One Shields Ave.
University of California at Davis
Davis, CA 95616, USA
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (Darwin)

iD8DBQFDoC4n9p/Jzwa2QP4RAiJUAJ9nCsmUSEuUwnssgwfcl+qdJ/oDlACeK6jw
r6QsjGFUtuPhKCd31dZX5Iw=
=jCmV
-----END PGP SIGNATURE-----




More information about the R-help mailing list