2014-09-12 5 views
-2

Учитывая евклидово расстояния функции:R векторизация - вычитание векторов

eDistance <- function(q,m){ 
    apply(m,1,function(x){ 
    sqrt(sum((q-x)^2)) 
    }) 
} 

И следующая матрица:

t = cbind(c(3,4,1,6,3),c(1,9,1,2,1)) 

Я хочу найти векторизованный способ сделать следующее:

r = rep(NA,nrow(t)) 
for (i in 1:nrow(t)){ 
    tmp = eDistance(t[i,],t) 
    r[i] = sum(tmp) 
} 

Моей главной задачей является время работы.

Thank you.

+3

-1 с двумя основными проблемами (IMHO), являющимися 1) желаемым выходом. 2) код сломан (перейдите к 'eDistance (c [i,], c)') –

+2

Вы никогда не определяете c. Вы также перезаписываете t –

ответ

2

Используйте функцию dist(). Вы хотите, чтобы сумма столбцов этого ...

colSums(as.matrix(dist(t))) 
#  1  2  3  4  5 
#13.22454 31.94863 17.64302 18.70368 13.22454 
Смежные вопросы