William Dunlap
2011-Apr-11 17:10 UTC
[Rd] sort.int(S3object) strips class but not the is.object flag
If x has an S3 class then sort.int(x) returns a value without an S3 class but which has the is.object flag set, which, I think, causes identical() give a false/misleading report: > x <- structure(1:3, class="unrecognizedClass") > y <- sort.int(x) > t <- 1:3 > identical(y, t) # expect TRUE [1] FALSE > identical(as.vector(y), as.vector(t)) # expect TRUE [1] FALSE > dput(y) 1:3 > dput(t) 1:3 > class(y) [1] "integer" > class(t) [1] "integer" > is.object(y) [1] TRUE > is.object(t) [1] FALSE The files made by save(t, file="t.Rdata", compress=FALSE) save(y, file="y.Rdata", compress=FALSE) differ in 2 places, where the first is presumably the name of the object: % cmp -l y.Rdata t.Rdata 36 171 164 39 1 0 (The problem persists after a save/load cycle.) This is on R 2.12.2 on Linux. Sorry, I don't have 2.13.0 yet installed. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com
William Dunlap
2011-Apr-11 17:28 UTC
[Rd] sort.int(S3object) strips class but not the is.object flag
> -----Original Message----- > From: r-devel-bounces at r-project.org > [mailto:r-devel-bounces at r-project.org] On Behalf Of William Dunlap > Sent: Monday, April 11, 2011 10:10 AM > To: R-devel at r-project.org > Subject: [Rd] sort.int(S3object) strips class but not the > is.object flag > > If x has an S3 class then sort.int(x) returns a value > without an S3 class but which has the is.object flag set, > which, I think, causes identical() give a false/misleading > report: > > > x <- structure(1:3, class="unrecognizedClass") > > y <- sort.int(x) > > t <- 1:3 > > identical(y, t) # expect TRUE > [1] FALSEThe misleading is.object flag can also affect the time it takes to sort objects (it looks like xtfrm is only called when is.object reports TRUE): > system.time(for(i in 1:1e5) order(y)) # is.object(y) is TRUE user system elapsed 12.07 0.00 11.28 > system.time(for(i in 1:1e5) order(t)) # is.object(t) is FALSE user system elapsed 1.98 0.01 2.01 Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> > identical(as.vector(y), as.vector(t)) # expect TRUE > [1] FALSE > > dput(y) > 1:3 > > dput(t) > 1:3 > > class(y) > [1] "integer" > > class(t) > [1] "integer" > > is.object(y) > [1] TRUE > > is.object(t) > [1] FALSE > > The files made by > save(t, file="t.Rdata", compress=FALSE) > save(y, file="y.Rdata", compress=FALSE) > differ in 2 places, where the first is presumably > the name of the object: > % cmp -l y.Rdata t.Rdata > 36 171 164 > 39 1 0 > (The problem persists after a save/load cycle.) > > This is on R 2.12.2 on Linux. Sorry, I don't have 2.13.0 > yet installed. > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
Duncan Murdoch
2011-Apr-11 17:34 UTC
[Rd] sort.int(S3object) strips class but not the is.object flag
On 11/04/2011 1:10 PM, William Dunlap wrote:> If x has an S3 class then sort.int(x) returns a value > without an S3 class but which has the is.object flag set, > which, I think, causes identical() give a false/misleading > report:I think your analysis is correct. It's too late for 2.13.0, but I'll fix this in R-devel, and backport it to 2.13.0-patched. Duncan Murdoch> > > x<- structure(1:3, class="unrecognizedClass") > > y<- sort.int(x) > > t<- 1:3 > > identical(y, t) # expect TRUE > [1] FALSE > > identical(as.vector(y), as.vector(t)) # expect TRUE > [1] FALSE > > dput(y) > 1:3 > > dput(t) > 1:3 > > class(y) > [1] "integer" > > class(t) > [1] "integer" > > is.object(y) > [1] TRUE > > is.object(t) > [1] FALSE > > The files made by > save(t, file="t.Rdata", compress=FALSE) > save(y, file="y.Rdata", compress=FALSE) > differ in 2 places, where the first is presumably > the name of the object: > % cmp -l y.Rdata t.Rdata > 36 171 164 > 39 1 0 > (The problem persists after a save/load cycle.) > > This is on R 2.12.2 on Linux. Sorry, I don't have 2.13.0 > yet installed. > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Duncan Murdoch
2011-Apr-11 18:07 UTC
[Rd] sort.int(S3object) strips class but not the is.object flag
On 11/04/2011 1:10 PM, William Dunlap wrote:> If x has an S3 class then sort.int(x) returns a value > without an S3 class but which has the is.object flag set, > which, I think, causes identical() give a false/misleading > report:Fixed in R-devel as of r55409. Duncan Murdoch> > > x<- structure(1:3, class="unrecognizedClass") > > y<- sort.int(x) > > t<- 1:3 > > identical(y, t) # expect TRUE > [1] FALSE > > identical(as.vector(y), as.vector(t)) # expect TRUE > [1] FALSE > > dput(y) > 1:3 > > dput(t) > 1:3 > > class(y) > [1] "integer" > > class(t) > [1] "integer" > > is.object(y) > [1] TRUE > > is.object(t) > [1] FALSE > > The files made by > save(t, file="t.Rdata", compress=FALSE) > save(y, file="y.Rdata", compress=FALSE) > differ in 2 places, where the first is presumably > the name of the object: > % cmp -l y.Rdata t.Rdata > 36 171 164 > 39 1 0 > (The problem persists after a save/load cycle.) > > This is on R 2.12.2 on Linux. Sorry, I don't have 2.13.0 > yet installed. > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel