[R] unexpected results in comparison (x == y)

Meyners, Michael, LAUSANNE, AppliedMathematics Michael.Meyners at rdls.nestle.com
Wed Nov 4 14:42:04 CET 2009


FAQ 7.31:
http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-the
se-numbers-are-equal_003f 

> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Peter Tillmann
> Sent: Mittwoch, 4. November 2009 13:50
> To: r-help at r-project.org
> Subject: [R] unexpected results in comparison (x == y)
> 
> 
> Dear readers of the list,
> 
> I have a problem a comparison of two data from a vector. The 
> comparison yields FALSE but should be TRUE. I have checked 
> for mode(), length() and attributes(). See the following code 
> (R2.10.0):
> -----------------------------------------------
> # data vector of 66 double data
> X =
> matrix(c(41.41,38.1,39.22,38.1,47.29,46.82,82.46,90.11,45.24,4
> 5.74,49.96,53.40,38.20,42.65,45.41,47.92,39.82,42.02,48.17,49.
> 47,39.67,43.89,47.55,50.05,35.75,37.41,46.13,53.64,52.18,56.30
> ,45.15,47.13,41.57,39.08,43.39,44.73,49.38,47.00,45.67,50.53,4
> 1.08,44.22,49.28,47.83,49.48,46.04,48.37,47.00,33.96,36.30,49.
> 40,46.44,24.40,24.79,41.55,46.26,37.43,39.88,40.63,38.64,49.92
> ,50.19,47.88,48.61,43.73,44.18),ncol=1)
> i = dim(X)
> 
> # calculating pairwise differences for each entry in X Y = 
> matrix(rep(0.0,i[1]*i[1]),ncol=i[1])
> for (j in 1:i[1]) {
> 	Y[j,] = X - X[j,]
> }
> 
> # getting pairwise absolute differences to vector Z and 
> selecting only (xj - xk), omitting (xk - xj) # and (xj - xj) 
> i.e. diagonal vector Z = rep(0, ((i[1]*i[1])-i[1])/2) nn <- 1 
> for (j in 1:i[1]) { for (k in 1:i[1]) {
> 	if (j > k)  {
> 		Z[nn] <- abs(Y[j,k])
> 		nn <- nn + 1
> 	}
> }
> }
> nn <- nn - 1
> 
> # sorting Z ascending to ZZ, to determine double entries with 
> same difference ii <- 0 ZZ <- sort(Z)
> 
> # here the problem occurs:
> ZZ[1:10]
> ZZ[4]
> ZZ[5]
> ZZ[4] == ZZ[5]
> mode(ZZ[4])
> mode(ZZ[5])
> length(ZZ[4])
> length(ZZ[5])
> attributes(ZZ[4])
> attributes(ZZ[5])
> -----------------------------------------------
> 
> I get:
>  
> > ZZ[1:10]
>  [1] 0.00 0.00 0.01 0.02 0.02 0.02 0.04 0.04 0.04 0.05
> > ZZ[4]
> [1] 0.02
> > ZZ[5]
> [1] 0.02
> > ZZ[4] == ZZ[5]
> [1] FALSE
> > mode(ZZ[4])
> [1] "numeric"
> > mode(ZZ[5])
> [1] "numeric"
> > length(ZZ[4])
> [1] 1
> > length(ZZ[5])
> [1] 1
> > attributes(ZZ[4])
> NULL
> > attributes(ZZ[5])
> NULL
> 
> Which is ok, except for ZZ[4] == ZZ[5].
> 
> Can someone please give me an advice where to look?
> In real world situations the original vector (X) will contain 
> upto 100 entries. 
> 
> 
> 
> --
> View this message in context: 
> http://old.nabble.com/unexpected-results-in-comparison-%28x-%3
D%3D-y%29-tp26195749p26195749.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at 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.
> 




More information about the R-help mailing list