替代使用sort:
sort(dMat[,1], index.return = TRUE)$ix[1:6]
在矩阵中使用random numbers 时添加set.seed(.) 会很好,这样我们就可以显示结果是相同的。我将跳过这里的结果。
编辑(正确的解决方案):上述解决方案只有在第一个元素总是最小的情况下才有效!下面是正确的解决方案,它总是为列的第一个元素提供 5 个最接近的值:
> sort(abs(dMat[-1,1] - dMat[1,1]), index.return=TRUE)$ix[1:5] + 1
例子:
> dMat <- matrix(c(70,4,2,1,6,80,90,100,3), ncol=1)
# James' solution
> head(order(dMat[-1,1]),5) + 1
[1] 4 3 9 2 5 # values are 1,2,3,4,6 (wrong)
# old sort solution
> sort(dMat[,1], index.return = TRUE)$ix[1:6]
[1] 4 3 9 2 5 1 # values are 1,2,3,4,6,70 (wrong)
# Correct solution
> sort(abs(dMat[-1,1] - dMat[1,1]), index.return=TRUE)$ix[1:5] + 1
[1] 6 7 8 5 2 # values are 80,90,100,6,4 (right)