[R] Object equality for S4 objects
Martin Morgan
mtmorgan at fhcrc.org
Thu Jul 30 22:03:19 CEST 2009
Stavros Macrakis wrote:
> On Thu, Jul 30, 2009 at 12:01 PM, Martin Morgan<mtmorgan at fhcrc.org> wrote:
>> S4 objects do not have the semantics of environments, but of lists (or of most other R objects), so it is as meaningful to ask why identical(s1, s2) returns TRUE as it is to ask why identical(list(x=1), list(x=1)) returns TRUE.
>
> Thanks for the clarification.
>
> For some reason, I thought that S4 objects (unlike S3 objects) were
> objects in the conventional computer science sense, that is, mutable.
S4 objects are mutable in the sense that one can write replacement
methods for them
setClass("A", representation=representation(aValue="logical"))
setGeneric("aValue<-",
function(object, value) standardGeneric("aValue<-"))
setReplaceMethod("aValue", "A", function(object, value) {
slot(object, "aValue") <- value
object
})
> a <- b <- new("A", aValue=FALSE)
> aValue(a) <- TRUE
> a
An object of class "A"
Slot "aValue":
[1] TRUE
while preserving copy-on-change
> b
An object of class "A"
Slot "aValue":
[1] FALSE
Martin
> Compare proto objects, which *are* objects in the usual sense:
>
>> proto1 <- proto(expr= {x=23})
>> proto2 <- proto1
>> proto1$x <- 45
>> proto2$x
> [1] 45 # proto1 and proto2 are the same object
>
>> setClass("test",representation(a="logical"))
> [1] "test"
>> s41 <- new("test")
>> s42 <- s41
>> s41 at a <- TRUE
>> s42 at a # s41 and s42 are different objects
> logical(0)
>
> It would thus perhaps be clearer to speak of S4 "values" rather than
> S4 "objects".
>
> -s
--
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-help
mailing list