drmariod drmariod - 3 months ago 20
R Question

check nearly equal against a substitution matrix in R

I have a maybe simple problem but do not find an easy and comprehensive way to do it.

I have a substitution matrix and I want to check if a specific (or almost equal) value is in my substation matrix. If I would search for the exact value, I could use

==
and get a matrix back. But how do I get a similar result with
all.equal
function to provide a specific precision.

a <- matrix(c(0.00000, -85.063997, -43.005813,
85.06400, 0.000000, 42.058184,
43.00581, -42.058184, 0.000000),3,byrow=TRUE)
85.06400 == a
all.equal(85, a)


I would love to just get the column and row index or names back.

Thanks for any help or hint.

Answer

There are some details (like whether you want to measure absolute or relative error), but abs(x-y)<eps is a start: then you can use which(...,arr.ind=TRUE) to get row/column indices.

a <- matrix(c(0.00000, -85.063997, -43.005813,
              85.06400, 0.000000, 42.058184,
              43.00581, -42.058184, 0.000000),3,byrow=TRUE)
target <- 85.06400
which(abs(a-target)<.Machine$double.eps,arr.ind=TRUE)
##      row col
## [1,]   2   1