矩阵中特定元素的返回位置 - R

时间:2017-08-31 09:01:11

标签: r matrix

我有相似度值矩阵(m)如下:

           [,1]      [,2]       [,3]
[1,]      1.0000000  1.0000000   0.8579698
[2,]      1.0000000  1.0000000   0.8579698
[3,]      0.8579698  0.8579698   1.0000000

我想通过简单的方式获得 0.8579698 的位置。 我试图使用哪个功能 它适用于元素1。

 which( m  == 1.0000000, TRUE)

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

问题并没有说明这个矩阵是如何构造的,但是这个问题似乎是由于0.8579698是实数(浮点)值的截断表达式。通常,您不能将精确相等用于实际值:

> .72==.72
[1] TRUE

可是:

> sqrt(.72)
[1] 0.8485281
> sqrt(.72)==0.8485281
[1] FALSE

这些显然相等的数字之间存在细微差别:

> sqrt(.72)-0.8485281
[1] 3.742386e-08

常见的解决方法是使用差异阈值而不是相等:

> m<-matrix(c(1,1,.72,1,1,.72,.72,.72,1),nrow=3,ncol=3)
> (m<-sqrt(m))
          [,1]      [,2]      [,3]
[1,] 1.0000000 1.0000000 0.8485281
[2,] 1.0000000 1.0000000 0.8485281
[3,] 0.8485281 0.8485281 1.0000000
> which(abs(m-.8485)<.0001,arr.ind = TRUE)
     row col
[1,]   3   1
[2,]   3   2
[3,]   1   3
[4,]   2   3