Hi,

I think your issue is that in the absence of an explicit 'initialize' method 
the value of id is assigned when you define the class prototype.  All 
subsequent new instances will use that very same prototype value defined when 
you first defined the class.  That's in the help for ?new, "The function new 
begins by copying the prototype object from the class definition."  Read on in 
the details section to learn more about 'initialize'.

To get a new id for each new object instance you can define an 'initialize' 
method.

setMethod("initialize",
          "C",
          function(.Object){
              .Object@id = UUIDgenerate(use.time = TRUE)
              .Object
          })

> new("C")
An object of class "C"
Slot "id":
[1] "f5e87504-2d83-11e6-9dcb-685b35bcefe9"

> new("C")
An object of class "C"
Slot "id":
[1] "f73cf010-2d83-11e6-9dcb-685b35bcefe9"

> new("C")
An object of class "C"
Slot "id":
[1] "f8321f22-2d83-11e6-9dcb-685b35bcefe9"

> new("C")
An object of class "C"
Slot "id":
[1] "f96e3c90-2d83-11e6-9dcb-685b35bcefe9"


There may be other ways to achieve the same outcome.   Caveat... I handy with 
Reference Classes (see ?setRefClass) but have only recently exploring S4 
classes.

Cheers,
Ben

> On Jun 8, 2016, at 8:24 AM, Servet Ahmet Çizmeli 
> <servet.ahmet.cizm...@usherbrooke.ca> wrote:
> 
> 
> 
> Hello 
> 
> When I create a new instance of an S4 class in R, I would like the newly
> created object to have a unique id field. I try to achieve it through
> UUIDgenerate() from the uuid package. The problem is that I obtain the
> same UUID at every new object instance : 
> 
> library(uuid)
> setClass("C",
> representation=representation(
> id = "character"
> ),
> prototype = prototype(
> id = UUIDgenerate(use.time = TRUE))
> )
> 
> new("C")
> 
> An object of class "C" Slot "id": [1]
> "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 
> 
> new("C")
> 
> An object of class "C" Slot "id": [1]
> "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 
> 
> new("C")
> 
> An object of class "C" Slot "id": [1]
> "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 
> 
> Calling UUIDgenerate() successively at the R command line produces
> different UUIDS each time. 
> 
> Where do I go wrong? 
> 
> Thanks 
> 
> Servet 
> 
> 
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org

Report Gulf of Maine jellyfish sightings to jellyf...@bigelow.org or tweet them 
to #MaineJellies -- include date, time, and location, as well as any 
descriptive information such as size or type.  Learn more at 
https://www.bigelow.org/research/srs/nick-record/nick-record-laboratory/mainejellies/

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to