From osklyar at maninvestments.com  Wed May  7 17:30:26 2008
From: osklyar at maninvestments.com (Sklyar, Oleg (MI London))
Date: Wed, 7 May 2008 16:30:26 +0100
Subject: [Rd] optional setValidity()
In-Reply-To: <1A68FCB28DE72F4BA3B967E6506CCE43022948C1@mildnpexmb01.maninvestments.ad.man.com>
References: <36166986-202B-4CD6-8AE9-DE17296742DB@noc.soton.ac.uk> 
	<1A68FCB28DE72F4BA3B967E6506CCE43022948C1@mildnpexmb01.maninvestments.ad.man.com>
Message-ID: <1A68FCB28DE72F4BA3B967E6506CCE43022948C2@mildnpexmb01.maninvestments.ad.man.com>

sorry I forgot the return statement, it should be
if (!object at .validate) return(TRUE)

Dr Oleg Sklyar
Technology Group
Man Investments Ltd
+44 (0)20 7144 3803
osklyar at maninvestments.com 

> -----Original Message-----
> From: r-devel-bounces at r-project.org 
> [mailto:r-devel-bounces at r-project.org] On Behalf Of Sklyar, 
> Oleg (MI London)
> Sent: 07 May 2008 16:13
> To: Robin Hankin; R-devel at r-project.org
> Subject: Re: [Rd] optional setValidity()
> 
> You could add a flag to your class and check if it set as a 
> first thing in the validity as in the example below:
> 
> setClass("foo",
>   representation("numeric", .validate="logical"),
>   prototype(.validate=TRUE),
>   validity=function(object) {
>     if (!object at .validate) TRUE
>     ## do lengthy checks
>   }
> )
> 
> setGeneric("foo", function(x, ...) standardGeneric("foo")) 
> setMethod("foo", signature(x="numeric"),
>   function(x, ..., validate=TRUE) new("foo", ..., .validate=validate)
> )
> 
> a = foo(runif(10), validate=FALSE)
> ## or
> b = new("foo", runif(10), .validate=FALSE) ## or do validate 
> d = foo(runif(10)) e = new("foo", runif(10))
> 
> The downside is that you carry unnecessary information around 
> in your objects.
> 
> Best,
> 
> Dr Oleg Sklyar
> Technology Group
> Man Investments Ltd
> +44 (0)20 7144 3803
> osklyar at maninvestments.com 
> 
> > -----Original Message-----
> > From: r-devel-bounces at r-project.org
> > [mailto:r-devel-bounces at r-project.org] On Behalf Of Robin Hankin
> > Sent: 07 May 2008 15:44
> > To: R-devel at r-project.org
> > Subject: [Rd] optional setValidity()
> > 
> > Hi
> > 
> > 
> > Suppose I have an S4 class "foo" and a validity checking function  
> > ".checkfoo()":
> > 
> > setClass("foo",  representation=representation("numeric"))
> > setValidity("foo" , .checkfoo)
> > 
> > is fine; in my application, .checkfoo() verifies that a bunch of 
> > necessary conditions are met.
> > 
> > But .checkfoo() is very time consuming and I want to give users the 
> > option of switching it off.
> > 
> > Most foo objects that one deals with fall into two or three 
> standard 
> > types and in these cases one doesn't need to execute
> >  .checkfoo() because one can show algebraically that the conditions 
> > are automatically met.
> > 
> > But OTOH, I want the check to be performed "by default" to 
> stop anyone 
> > (me) from being too clever and defining a non-standard foo 
> object that 
> > doesn't meet .checkfoo().
> > 
> > What is best practice here?
> > 
> > Are there any examples I could copy?
> > 
> > 
> > 
> > 
> > 
> > --
> > Robin Hankin
> > Uncertainty Analyst and Neutral Theorist, National Oceanography 
> > Centre, Southampton European Way, Southampton
> > SO14 3ZH, UK
> >   tel  023-8059-7743
> > 
> > ______________________________________________
> > R-devel at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
> > 
> 
> 
> **********************************************************************
> The contents of this email are for the named 
> addressee(s...{{dropped:22}}
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 


**********************************************************************
The contents of this email are for the named addressee(s...{{dropped:22}}



[Rd] optional setValidity()
Sklyar, Oleg (MI London