[R] setValidity and "initialize" method conflict ?
Thomas Stabla
a9265 at stud.uni-bayreuth.de
Wed Nov 12 21:21:31 CET 2003
Hello,
i am using classes and want to force an validity check when an
object is created.
platform i686-pc-linux-gnu
arch i686
os linux-gnu
system i686, linux-gnu
status
major 1
minor 7.1
year 2003
month 06
day 16
language R
Following piece of code works fine, just like I expected it to
----------
> setClass("Foo", representation(woo = "numeric"))
[1] "Foo"
> validFooObject <- function(object) {
+ if(object at woo > 0) return(TRUE)
+ else return("warning: negative value for woo")}
> setValidity("Foo", validFooObject)
[1] "Foo"
> new("Foo", woo = 1) # all is fine
An object of class "Foo"
Slot "woo":
[1] 1
> new("Foo", woo = -1) # ok, negative value
Error in validObject(.Object) : Invalid "Foo" object: warning: negative
value for woo
---------
Now, if i define a initialize method for Foo, things change (R had
been restarted)
---------
> setClass("Foo", representation(woo = "numeric"))
[1] "Foo"
> validFooObject <- function(object) {
+ if(object at woo > 0) return(TRUE)
+ else return("warning: negative value for woo")}
> setValidity("Foo", validFooObject)
[1] "Foo"
> setMethod("initialize", "Foo", function(.Object, woo){
+ .Object at woo = woo
+ .Object})
[1] "initialize"
> new("Foo", woo = 1) # all is fine
An object of class "Foo"
Slot "woo":
[1] 1
> new("Foo", woo = -1) # ! no warning, object created!
An object of class "Foo"
Slot "woo":
[1] -1
---------
How do i force an validity check, when an initalize method has been
set?
Thanks for your help.
Greetings,
Thomas Stabla
-------------- next part --------------
setClass("Foo", representation(woo = "numeric"))
validFooObject <- function(object) {
if(object at woo > 0) return(TRUE)
else return("warning: negative value for woo")}
setValidity("Foo", validFooObject)
new("Foo", woo = 1) # all is fine
new("Foo", woo = -1) # ok, negative value
###############################################
setClass("Foo", representation(woo = "numeric"))
validFooObject <- function(object) {
if(object at woo > 0) return(TRUE)
else return("warning: negative value for woo")}
setValidity("Foo", validFooObject)
setMethod("initialize", "Foo", function(.Object, woo){
.Object at woo = woo
.Object})
new("Foo", woo = 1) # all is fine
new("Foo", woo = -1) # ! no warning message is produced !
More information about the R-help
mailing list