Dear useRs and wizaRds,

I am currently developing a set of functions using S4 classes. On the way I encountered the problem exemplified with the code below. For some reason the 'validity' method does not seem to work, i.e. does not check for errors in the specification of the slots of the defined class. Any hints?

My understanding of the whole S4 system was that validity checks are made *after* class initialization. Is that correct?

Thanks a lot in advance!

PS. Session info:

R version 2.5.1 (2007-06-27) 
i386-pc-mingw32 

locale:
LC_COLLATE=Polish_Poland.1250;LC_CTYPE=Polish_Poland.1250;LC_MONETARY=Polish_Poland.1250;LC_NUMERIC=C;LC_TIME=Polish_Poland.1250

attached base packages:
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
[7] "base"     
> 




-b-e-g-i-n--r--c-o-d-e-

setClass( "someclass", representation(v="numeric", l="character"),
    prototype( v=numeric(0),
	l=character(0) )
    )

setMethod("initialize", "someclass",
function(.Object, v=numeric(0), l=character(0))
{
    # strip the vector names
    cv <- v
    cl <- l
    names(cv) <- NULL
    names(cl) <- NULL
    rval <- .Object
    rval@v <- cv
    rval@l <- cl
    rval
} )

# at this point this should be OK
o <- new("someclass", v=1:2, l=letters[1:3])
o

# check validity
f <- function(object)
{
    rval <- NULL
    if( length(object@v) != length(object@l) )
	rval <- c( rval, "lengths dont match")
    if( is.null(rval) ) return(TRUE)
    else return(rval)
}
 
# this should return error description
f(o)


# define the validity method
setValidity( "someclass", f)

# this should return an error
new("someclass", v=1:2, l=letters[1:3])

# but it doesn't...

-e-n-d--r--c-o-d-e-




____________________________________
Michal Bojanowski
ICS / Department of Sociology
Utrecht University
Heidelberglaan 2; 3584 CS Utrecht
Room 1428
m.j.bojanowski at uu dot nl
http://www.fss.uu.nl/soc/bojanowski/


	[[alternative HTML version deleted]]

