Почему двойное / числовое значение в матрице возвращает неправильный ответ, используя% в% диапазоне? - PullRequest
6 голосов
/ 08 июня 2011

Я обнаружил, что целые и двойные значения ведут себя по-разному в матрице, и неправильный ответ возвращается только для двойных типов данных.

#Test
m <- matrix(1:12,4,3)
which(!m[1,] %in% 1:5)

which(!m[1,] %in% 1:5)
[1] 3

Однако, когда я изменил значения в двойном / числовом,

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

только 2 должны быть в ответе, потому что 1,3 находятся в диапазоне от 0,10 до 0,35, поэтому они отличаются в вычислениях с использованием целых и числовых значений. Спасибо!

1 Ответ

9 голосов
/ 08 июня 2011

Это потому, что у вас ошибочное понимание того, что делает оператор :. : не указывает диапазон, но действительно является ярлыком для генерации последовательностей дискретных значений (с целочисленными интервалами).

Сравнить:

> 1:5
[1] 1 2 3 4 5

> 0.1:0.35
[1] 0.1

Итак, ваш первый бит кода проверяет, является ли значение %in% диапазоном целых чисел от 1 до 5. Но второй бит кода проверяет, равны ли ваши данные 0,1.

Чтобы получить желаемый результат, вам необходимо написать следующее:

which(!(m[1, ] >= 0.1 & m[1, ] <= 0.35))
[1] 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...