Skip to content

Calculating Minimum Absolute Difference of Two Numeric Vectors

3 messages · Dario Strbenac, Jeff Newmiller, PIKAL Petr

#
Good day,

What is a fast and efficient way to calculate the minimum absolute difference between two vectors of numbers? The two vectors have unequal length. I would also like to know the index of the first vector and the second vector which results in the minimum absolute difference. For example:

x <- rpois(500, 100)
y <- rpois(300, 30)

Is there a much faster way than a nested for loop without resorting to Rcpp?

--------------------------------------
Dario Strbenac
University of Sydney
Camperdown NSW 2050
Australia
#
This looks more like a code challenge than a real problem, but anyway Rcpp seems unnecessary.

x <- (2:5)^2/3
y <- (1:6)+0.1
ad <- function( a, b ) {
  abs( a - b )
}
M <- outer( x, y, FUN=ad )
which( M==min(M), arr.ind = TRUE )
On August 18, 2020 12:00:09 AM PDT, Dario Strbenac <dstr7320 at uni.sydney.edu.au> wrote:

  
    
#
Hi

maybe

min(abs(outer(x,y, "-")))

If you want indices 

mm <- min(abs(outer(x,y, "-")))
which(abs(outer(x,y, "-"))== mm, arr.ind=TRUE)

And in original vectors

x[which(abs(outer(x,y, "-"))== mm, arr.ind=TRUE)[1]]
y[which(abs(outer(x,y, "-"))== mm, arr.ind=TRUE)[2]]

Cheers
Petr
Vectors
difference
vector
Rcpp?