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

David Winsemius dwinsemius at comcast.net
Wed Nov 4 14:27:08 CET 2009


I'm guessing that it's in the FAQ, although I have not committed its  
number to memory.

Try using all.equal() instead of "=="

-- 
David


On Nov 4, 2009, at 7:49 AM, Peter Tillmann wrote:

>
> 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,45.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,41.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-%3D%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.

David Winsemius, MD
Heritage Laboratories
West Hartford, CT




More information about the R-help mailing list