[R] Infix all.equal operator for vectors of unequal length
David Winsemius
dwinsemius at comcast.net
Wed Aug 5 16:12:17 CEST 2009
I was trying to use all.equal inside subset() and getting errors
because I was comparing vectors of unequal length (a column versus a
constant). I defined an function that did not throw the same errors,
but wondered if something similar (and probably better designed than
my noobish attempt) had already been described. Searching on all.equal
and infix did not produce any results with RSiteSearch.
set.seed(23)
df1 <- data.frame(a= rnorm(10), b=letters[1:10])
df1
subset(df1, all.equal(a, 0.19321233, tol=0.0001))
#Error in subset.data.frame(df1, all.equal(a, 0.19321233, tol =
1e-04)) :
# 'subset' must evaluate to logical
all.equal(df1$a, 0.19321233, tol=0.0001)
# [1] "Numeric: lengths (10, 1) differ"
#----
`%=%` <- function(x,y) {abs(x - y) <= .Machine$double.eps ^ 0.5}
#----
df1$a %=% 0.19321233
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
subset(df1, a %=% 0.19321233)
# a b
# 0.1932123 a
(Was a bit surprised that the condition was satisfied with such a low
tolerance, but was happy with the function working as expected.)
--
David Winsemius, MD
Heritage Laboratories
West Hartford, CT
More information about the R-help
mailing list