To test two environments for object equality (Lisp EQ), I can use 'identity':

> e1 <- environment(local(function()x))
> e2 <- environment(local(function()x))
> identical(e1,e2)                      # compares object identity
[1] FALSE
> identical(as.list(e1),as.list(e2))    # compares values as name->value mapping
[1] TRUE                                # (is there a better way to do this?)

What is the corresponding function for testing whether two S4 objects
are the same object?  It appears that 'identity' for S4 objects
compares the *value*, not the *object identity*:

> setClass("simple",representation(a="logical"))
[1] "simple"
> s1 <- new("simple"); s2 <- new("simple")
> identical(s1,s1)
[1] TRUE                               # not surprising
> identical(s1,s2)
[1] TRUE                               # ? not comparing object identity
> s...@a <- TRUE
> s...@a <- TRUE
> identical(s1,s2)
[1] TRUE
> s...@a <- TRUE
> s...@a <- FALSE
> identical(s1,s2)
[1] FALSE

Thanks,

              -s

______________________________________________
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