Hi Edna --

Quoting Edna Bell <edna.bel...@gmail.com>:

I have put together a test class and methods

setClass("foo",representation(x="numeric"))
[1] "foo"

This creates an *S4* class which HAS A 'slot' x that is of type numeric.

setMethod("plot","foo",function(x,y,...)boxplot(x,...))
[1] "plot"
x <- rnorm(100)
class(x) <- "foo"

uh oh, this is creating an *S3* class that IS A numeric that has been given the class name "foo". The S3 class 'foo' and S4 class 'foo' are different. Note that you can make anything an S3 class

z=letters
class(z) <- "foo"

because S3 does not have any definition for what a 'foo' class is.

plot(x)

this 'works' but in my view should not -- the method is defined for the S4 class, not for the S3 class.

y <- new("foo",x=rnorm(50))

Here you're creating an instance of the S4 class. S4 insists that objects constructed as class 'foo' conform to the class specification

new("foo", x=letters)
Error in validObject(.Object) :
invalid class "foo" object: invalid object for slot "x" in class "foo": got cl
ass "character", should be or extend class "numeric"

class(y)
[1] "foo"


My question is:  should I have a "foo" function which sets the class
to "foo", please?  or a sort of Validity checker, please?

I think normally one would have class "Foo" (capitalized; this is my style & convention, others are free to do as they please) with constructor


setClass("Foo", representation=representation(x="numeric"))

Foo <- function(x=numeric(), ...)
{
    new("Foo", x=x, ...)
}

I'd normally also define a validity method with setValidity("Foo", <etc>) if my class had constraints other than 'slot x has to be numeric' (which is checked by the default validity method). Dispatch on validity methods is different from on standard methods, as explained in ?setValidity.

Hope that helps,

Martin

Thanks,
Edna Bell

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to