我写了一个简短的for循环找到最小欧式每行之间的数据帧和所有其他行距离(并记录该行最近的)。 在理论上,这避免了与试图计算距离的措施非常大的矩阵相关的误差。 然而,虽然没有那么多被保存在内存中,这是非常大型矩阵(〜150K行的我用例仍在运行)非常缓慢。
我不知道是否有人可以建议或向量化我的功能,使用应用或类似的术语点我在正确的方向。 什么道歉似乎是一个简单的问题,但我仍然在努力想在向量化的方式。
在此先感谢(和你的耐心)。
require(proxy)
df<-data.frame(matrix(runif(10*10),nrow=10,ncol=10), row.names=paste("site",seq(1:10)))
min.dist<-function(df) {
#df for results
all.min.dist<-data.frame()
#set up for loop
for(k in 1:nrow(df)) {
#calcuate dissimilarity between each row and all other rows
df.dist<-dist(df[k,],df[-k,])
# find minimum distance
min.dist<-min(df.dist)
# get rowname for minimum distance (id of nearest point)
closest.row<-row.names(df)[-k][which.min(df.dist)]
#combine outputs
all.min.dist<-rbind(all.min.dist,data.frame(orig_row=row.names(df)[k],
dist=min.dist, closest_row=closest.row))
}
#return results
return(all.min.dist)
}
#example
min.dist(df)