# Re: [R] all.equal() and which()

From: Frank Samuelson <expiregmane0306.m.cudgle_at_neverbox.com>
Date: Mon 29 May 2006 - 07:29:06 EST

I think that this thread demonstrates a useful point: The more logical and useful output of all.equal(A,B) would be a vector of TRUEs and FALSEs with a length equal to that of the arguments, rather than some human readable text string. If I really want a tolerance I can always do sd/min/max/etc(abs(A-B)) and have it in a useful numeric form.

-Frank

Marc Schwartz (via MN) wrote:
> On Fri, 2006-02-03 at 10:41 -0500, tom wright wrote:
>
>>Please excuse the lack of a complete dataset here, if its needed I'll be
>>happy to provide it.
>>Can anyone show me how to rewrite this?
>>
>>Browse[1]> time(data)[24210:24220]
>>[1] 24.209 24.210 24.211 24.212 24.213 24.214 24.215 24.216 24.217
>>[10] 24.218 24.219
>>
>>Browse[1]> which(time(data)==24.211)
>>numeric(0)
>>
>>I'm assuming its an eps fault but
>>which(all.equal(time(data),24.211))
>>
>>dosnt seem to work
>
>
>
> There might be an easier way, but here is one approach:
>
>
>>mydat
>
> [1] 24.209 24.210 24.211 24.212 24.213 24.214 24.215 24.216 24.217
> [10] 24.218 24.219
>
>
>>which(sapply(mydat, function(x) isTRUE(all.equal(24.211, x))))
>
> [1] 3
>
>
> This uses sapply() to check each element of 'mydat' against the target
> value of 24.211. The use of 'isTRUE(all.equal(...))' returns a boolean
> result of either TRUE or FALSE, enabling the use of which() against the
> vector returned from sapply():
>
>
>>sapply(mydat, function(x) isTRUE(all.equal(24.211, x)))
>
> [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>
>
> HTH,
>
> Marc Schwartz
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help