all.equal() and which()
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 See ?all.equal and ?isTRUE for more information. HTH, Marc Schwartz