从R中的距离矩阵获得最近邻距离

时间:2017-01-20 19:23:21

标签: r split distance min nearest-neighbor

我有一个大型数据集,它是一个由R中使用dist命令创建的1500个成对距离矩阵的列表。我需要为每个人提供最近的邻居'在每个1500个矩阵中(它们包含的个体数量不同),但是我遇到了问题。我发现其他链接Computing sparse pairwise distance matrix in R可能会为距离矩阵做这个,但第一个问题是它似乎会让每个矩阵中的一个人离开。如果有6个人,它只返回前5个的最近邻居。另一个问题是它没有返回原始距离矩阵中的相同值(如链接中所示),而是正在改变价值。有没有更新的软件包或命令可以做到这一点?或者有没有人知道能够做到这一点的诀窍?谢谢!

这是一个示例矩阵和所需的输出

      a  b  c   d   e   
b   1.5                 
c   1.3 2.3             
d   2.2 2.1 3.1         
e   2.4 1.4 1.6 2.2     
f   3.2 1.6 2.7 3.1 1.5 

期望的输出

a   1.3                 
b   1.4                 
c   1.3                 
d   2.1                 
e   1.4                 
f   1.5                 

编辑以显示我试图使用digEmAll的建议的循环,该建议适用于单个矩阵。 dists是已计算的距离矩阵列表,我需要最近的邻居。

nearest<-list()
tempd<-list()
runndist<- for (i in 1:1561) {
tempd[[paste(i)]]<-as.matrix(dists[[i]])
nearest[[paste(i)]]<-diag(tempd[[i]]) <-NA;apply(tempd[[i]],1,min,na.rm=TRUE)}

编辑让循环工作,现在给出列表中所有矩阵的最近邻居距离。我确信这可以更优雅地完成,但它可以满足我的需要。

 nearest<-list()
tempd<-list()
tempd2<-list()
runndist<- for (i in 1:1561) {
tempd[[paste(i)]]<-as.matrix(dists[[i]])
tempd2[[paste(i)]]<-diag(tempd[[i]])<-NA

tryCatch({
    nearest[[paste(i)]]<-apply(tempd[[i]],1,min,na.rm=TRUE)
    if (i==7) stop("could not calculate")
}, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
}

0 个答案:

没有答案