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