ntsean 发表于 2015-8-26 09:57 
楼主问的是矩阵,所以要提供行列,你的方法是当作向量做
您好,我不是怀疑您在选用函数上有问题,是算法上可能存在问题,看下面的测试结果:
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 0.00 0.09 0.14 0.12 0.18
[2,] 0.00 0.08 0.11 0.23 0.17
[3,] 0.00 0.14 0.20 0.08 0.12
[4,] 0.00 0.14 0.14 0.12 0.17
[5,] 0.00 0.23 0.17 0.08 0.14
[6,] 0.00 0.08 0.15 0.23 0.18
[7,] 0.06 0.06 0.18 0.12 0.11
[8,] 0.09 0.12 0.15 0.08 0.27
[9,] 0.20 0.20 0.20 0.17 0.06
> arrayInd(which(order(y, decreasing = TRUE) <= 10), dim(y))
[,1] [,2]
[1,] 5 1
[2,] 3 4
[3,] 4 4
[4,] 1 5
[5,] 4 5
[6,] 5 5
[7,] 6 5
[8,] 7 5
[9,] 8 5
[10,] 9 5
asdasdaseee结果是正确的:
> arrayInd(sort.list(y,decreasing=T)[1:10],dim(y))
[,1] [,2]
[1,] 8 5
[2,] 5 2
[3,] 2 4
[4,] 6 4
[5,] 9 1
[6,] 9 2
[7,] 3 3
[8,] 9 3
[9,] 7 3
[10,] 1 5
which(order(y, decreasing = TRUE) <= 10)含义是先将数据进行排序,然后取索引小于等于10的,最大的10个数在排完序后,索引不应是<=10,而是排在前10位的就是最大的10个数的索引。
可以这样写:
> arrayInd(order(y,decreasing=TRUE)[1:10],dim(y))
[,1] [,2]
[1,] 8 5
[2,] 5 2
[3,] 2 4
[4,] 6 4
[5,] 9 1
[6,] 9 2
[7,] 3 3
[8,] 9 3
[9,] 7 3
[10,] 1 5