Relaxed Value Matching
match.closest
returns a vector of the positions of (first) matches its first arguments in its second. In contrast to the similar match
it just accept numeric
arguments but has an additional tolerance
argument that allows relaxed matching.
match.closest(x, table, tolerance = Inf, nomatch = NA_integer_)
x
: numeric
, the values to be matched.table
: numeric
, the values to be matched against. In contrast to match
table
has to be sorted in increasing order.tolerance
: numeric
, accepted tolerance. Use Inf
to match without restrictions. Could be of length one or the same length as table
.nomatch
: numeric
, if the difference between the value in x
and table
is larger than tolerance
nomatch
is returned. Has to be of length one.An integer
vector of the same length as x
giving the closest position in table
of the first match or nomatch
if there is no match.
library("MALDIquant") match.closest(c(1.1, 1.4, 9.8), 1:10) # [1] 1 1 10 match.closest(c(1.1, 1.4, 9.8), 1:10, tolerance=0.25) # [1] 1 NA 10 match.closest(c(1.1, 1.4, 9.8), 1:10, tolerance=0.25, nomatch=0) # [1] 1 0 10 ## this function is most useful if you want to subset an intensityMatrix ## by a few (reference) peaks ## create an example intensityMatrix im <- matrix(1:10, nrow=2, dimnames=list(NULL, 1:5)) attr(im, "mass") <- 1:5 im # 1 2 3 4 5 # [1,] 1 3 5 7 9 # [2,] 2 4 6 8 10 # attr(,"mass") # [1] 1 2 3 4 5 ## reference peaks ref <- c(2.2, 4.8) im[, match.closest(ref, attr(im, "mass"), tolerance=0.25, nomatch=0)] # 2 5 # [1,] 3 9 # [2,] 4 10
match
Useful links