Sklyar, Oleg (London)
2009-Feb-11 12:25 UTC
[Rd] setClassUnion with numeric; extending class union
Dear list: I am looking for a good way to create an S4 class that would extend numeric, but would allow NULL instead of data as well. As far as I can see there is no way at the moment to do that, but please correct me if I am wrong. The best solution I came up with so far was the following (it also indicates a problem of using setClassUnion with numeric as one of the classes): I define a class union of numeric and NULL: Unfortunately the following works only with warnings: setClassUnion("numericOrNULL", c("numeric","NULL")) So I do a workaround as: setClass("aNumeric", contains="numeric") setClassUnion("numericOrNULL", c("aNumeric","NULL")) Then I cannot really extend the above virtual class and can only use it in a user-defined slot as follows: setClass("myClass", representation(data="numericOrNULL")) new("myClass", data=runif(20)) new("myClass", data=NULL) and this works. Obviously it would be nicer to have something like the following: setClass("myClass", contains="numericOrNULL") new("myClass", runif(20)) ## .Data is not a slot of myClass setClass("myClass", representation("numericOrNULL")) new("myClass", runif(20)) ## ibid Technically I understand that the reason behind it failing to work is that the virtual class numericOrNULL has not got the .Data slot from numeric, but it would be nice to have such a functionality. Any ideas about better ways for solving such a problem than the one described above? Thanks. Best, Oleg Dr Oleg Sklyar Research Technologist AHL / Man Investments Ltd +44 (0)20 7144 3107 osklyar at maninvestments.com ********************************************************************** Please consider the environment before printing this email or its attachments. The contents of this email are for the named addressees ...{{dropped:19}}
John Chambers
2009-Feb-11 19:46 UTC
[Rd] setClassUnion with numeric; extending class union
What warnings? Which part of the following is not what you're looking for? (The usual information is needed, like version of R, reproducible example, etc.) > setClassUnion("numericOrNULL", c("numeric","NULL")) [1] "numericOrNULL" > setClass("foo", representation(x="numericOrNULL")) [1] "foo" > ff = new("foo", x= 1:10) > fg = new("foo", x = NULL) > > ff An object of class ?foo? Slot "x": [1] 1 2 3 4 5 6 7 8 9 10 > fg An object of class ?foo? Slot "x": NULL > fk = new("foo") > fk An object of class ?foo? Slot "x": NULL John Sklyar, Oleg (London) wrote:> Dear list: > > I am looking for a good way to create an S4 class that would extend > numeric, but would allow NULL instead of data as well. As far as I can > see there is no way at the moment to do that, but please correct me if I > am wrong. The best solution I came up with so far was the following (it > also indicates a problem of using setClassUnion with numeric as one of > the classes): > > I define a class union of numeric and NULL: > > Unfortunately the following works only with warnings: > setClassUnion("numericOrNULL", c("numeric","NULL")) > > So I do a workaround as: > > setClass("aNumeric", contains="numeric") > setClassUnion("numericOrNULL", c("aNumeric","NULL")) > > Then I cannot really extend the above virtual class and can only use it > in a user-defined slot as follows: > > setClass("myClass", representation(data="numericOrNULL")) > new("myClass", data=runif(20)) > new("myClass", data=NULL) > > and this works. > > Obviously it would be nicer to have something like the following: > > setClass("myClass", contains="numericOrNULL") > new("myClass", runif(20)) ## .Data is not a slot of myClass > setClass("myClass", representation("numericOrNULL")) > new("myClass", runif(20)) ## ibid > > Technically I understand that the reason behind it failing to work is > that the virtual class numericOrNULL has not got the .Data slot from > numeric, but it would be nice to have such a functionality. > > Any ideas about better ways for solving such a problem than the one > described above? > > Thanks. > > Best, > Oleg > > Dr Oleg Sklyar > Research Technologist > AHL / Man Investments Ltd > +44 (0)20 7144 3107 > osklyar at maninvestments.com > > ********************************************************************** > Please consider the environment before printing this email or its attachments. > The contents of this email are for the named addressees ...{{dropped:19}} > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel > >