I found integer and double values behaves differently in matrix and wrong answer returned for double data types only.
#Test
m <- matrix(1:12,4,3)
which(!m[1,] %in% 1:5)
which(!m[1,] %in% 1:5)
[1] 3
However, when I changed the values in double/numeric,
m <- matrix(c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6), 4,3)
which(!m[1,] %in% 0.10:0.35)
[,1] [,2] [,3]
[1,] 0.1 0.5 0.3
[2,] 0.2 0.6 0.4
[3,] 0.3 0.1 0.5
[4,] 0.4 0.2 0.6
which(!m[1,] %in% 0.10:0.35)
[1] 2 3
only 2 should be in the answer because 1,3 are in the range of 0.10 to 0.35, why it is different in the computation using integer and numeric. Thanks!
It's because you have a flawed understanding of what the :
operator does. :
does not indicate a range, but is indeed a shortcut to generate sequences of discrete values (at integer intervals).
Compare:
> 1:5
[1] 1 2 3 4 5
> 0.1:0.35
[1] 0.1
So your first bit of code tests whether a value is %in%
the range of integers 1 to 5. But the second bit of code tests whether your data is equal to 0.1.
To get the result you are after, you need to write the following:
which(!(m[1, ] >= 0.1 & m[1, ] <= 0.35))
[1] 2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With