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

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}}



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