我有一个大型数据集,它是一个由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")})
}