Dario Strbenac
2020-Aug-18 07:00 UTC
[R] Calculating Minimum Absolute Difference of Two Numeric Vectors
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
Jeff Newmiller
2020-Aug-18 08:35 UTC
[R] Calculating Minimum Absolute Difference of Two Numeric Vectors
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:>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 > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >https://stat.ethz.ch/mailman/listinfo/r-help >PLEASE do read the posting guide >http://www.R-project.org/posting-guide.html >and provide commented, minimal, self-contained, reproducible code.-- Sent from my phone. Please excuse my brevity.
PIKAL Petr
2020-Aug-18 09:00 UTC
[R] Calculating Minimum Absolute Difference of Two Numeric Vectors
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> -----Original Message----- > From: R-help <r-help-bounces at r-project.org> On Behalf Of Dario Strbenac > Sent: Tuesday, August 18, 2020 9:00 AM > To: r-help at r-project.org > Subject: [R] Calculating Minimum Absolute Difference of Two NumericVectors> > Good day, > > What is a fast and efficient way to calculate the minimum absolutedifference> 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 secondvector> 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 toRcpp?> > -------------------------------------- > Dario Strbenac > University of Sydney > Camperdown NSW 2050 > Australia > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting- > guide.html > and provide commented, minimal, self-contained, reproducible code.