[R] Efficient way to Calculate the squared distances for a set of vectors to a fixed vector

Daniel Malter daniel at umd.edu
Wed Aug 24 08:43:44 CEST 2011


Let's say your fixed vector is x, and y is the list of vectors that you want
to create the squared distance to x with, then:

x<-c(1:5)
y<-list()
y[[1]]<-sample(c(1:5),5)
y[[2]]<-sample(c(1:5),5)
y[[3]]<-sample(c(1:5),5)
y

distances<-lapply(y,function(a,b) crossprod(a-b), b=x) 

#lapply goes over the list elements of y and executes the function for each
of these list elements
#the current list element of "y" is plugged in for "a" and "x" is plugged in
for "b" and the crossproduct is formed

distances<-unlist(distances)

HTH,
Daniel





Wei Wu wrote:
> 
> I am pretty new to R. So this may be an easy question for most of you.
>  
> I would like to calculate the squared distances of a large set (let's say
> 20000) of vectors (let's say dimension of 5) to a fixed vector.
>  
> Say I have a data frame MY_VECTORS with 20000 rows and 5 columns, and one
> 5x1 vector y. I would like to efficiently calculate the squared
> distances between each of the 20000 vectors in MY_VECTORS and y.
>  
> The squared distance between two vectors x and y can be calculated:
> distance <- crossprod(x-y)
>  
> Without looping, what is the efficient code to achieve this?
>  
> Thanks.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
> 

--
View this message in context: http://r.789695.n4.nabble.com/Efficient-way-to-Calculate-the-squared-distances-for-a-set-of-vectors-to-a-fixed-vector-tp3764589p3764616.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list