У меня есть несколько точек, которые лежат вокруг y=x
(см. Примеры ниже), и я надеюсь вычислить ортогональное расстояние каждой точки до этой y=x
. Предположим, что точка имеет координаты (a,b)
, тогда легко увидеть, что спроецированная точка на y=x
имеет координаты ((a+b)/2, (a+b)/2)
. Я использую следующие собственные коды для вычислений, но думаю, мне нужен более быстрый без for
циклов. Большое спасибо!
set.seed(999)
n=50
typ.ord = seq(-2,3, length=n) # x-axis
#
good.ord = sort(c(rnorm(n/2, typ.ord[1:n/2]+1,0.1),rnorm(n/2,typ.ord[(n/2+1):n]-0.5,0.1)))
y.min = min(good.ord)
y.max = max(good.ord)
#
plot(typ.ord, good.ord, col="green", ylim=c(y.min, y.max))
abline(0,1, col="blue")
#
# a = typ.ord
# b = good.ord
cal.orth.dist = function(n, typ.ord, good.ord){
good.mid.pts = (typ.ord + good.ord)/2
orth.dist = numeric(n)
for (i in 1:n){
num.mat = rbind(rep(good.mid.pts[i],2), c(typ.ord[i], good.ord[i]))
orth.dist[i] = dist(num.mat)
}
return(orth.dist)
}
good.dist = cal.orth.dist(50, typ.ord, good.ord)
sum(good.dist)