在不使用 1 或 2 个 for 循环的情况下,我真的很难在 R 代码中复制 dist() 函数的输出。(如果您想知道我为什么要这样做,这是为了让我可以玩距离计算,并提高我的 R 技能 - 所以请只使用涉及 R 的解决方案!)
概述:矩阵被传递给 dist(),它逐行计算欧几里得距离并输出每行之间距离的完整距离矩阵(例如,第 1 行和第 50 行之间的距离将在 distancematrix[1, 50] 和 distancematrix[ 50, 1])。快速代码如下所示:
distancematrix <- as.matrix(dist(myMatrix, method="euclidean", diag = T, upper = T))
我已经使用以下代码在 R 中成功生成了相同的输出:
for (i in 1:nrow(myMatrix)) {
for (j in 1:nrow(myMatrix)) {
distancematrix[i, j] <- sum(abs(myMatrix[i,] - myMatrix[j,]))
}
}
但是,使用两个嵌套的 for 循环比使用 dist() 慢得多。我已经阅读了很多关于使用 apply() 来优化更慢的 for 循环的内容,但到目前为止我还没有完全理解它。我相信至少可以通过输出一个向量并在最后处理它来避免至少一个 for 循环。但是,我终其一生都无法弄清楚如何删除两个 for 循环。
有人有想法吗?