この行列がどのように構築されたかは問題ではありませんが、この問題は実際の(浮動小数点)値の切り捨てられた表現である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
この例では、 'which(m)<1'を実行することもできます。 – lmo