【发布时间】:2012-11-23 11:22:42
【问题描述】:
我正在使用 R 语言从每个矩阵行值中找到 square of Euclidean distance 每行的指定向量,并且向量是用于比较两个点的点我创建了这个函数
euclDist <- function(p1, p2){
sum((p1 - p2)^2)
}
现在我想创建一个函数,在矩阵中找到到指定点的欧几里得距离最小的行
minDist<- function(points, p){
dist = c()
for(i in seq(1:length(points[,1])))
dist[i] = euclDist2(points[i,], p)
which.min(dist)
}
例如
points = matrix(c(1:24), ncol=4)
p = c(1,2,1,2)
print(minDist(points, p))
结果是 1,因为第一行到点 p 的距离最小
这很好用,但我想通过使用 apply 变体之一来摆脱 for 循环,但我找不到一个可以逐行处理矩阵并支持多个参数的循环。
编辑:此问题已修改,因为第一个代码在括号和括号方面存在一些问题:-(
【问题讨论】:
-
你的循环不起作用:
length(points, 1) -
另外,你有变量
dist和dis -
并且
for(i in...中缺少关闭)还请注意points和p具有不同的维度,points每列有 6 个 obs,p是一个向量只有 4 个元素。 -
抱歉,我从更复杂的代码中提取了这段代码,然后即时更改它,现在我解决了所有问题并使其正常工作。