Невозможно проиндексировать определенные значения вектора, созданного с помощью seq () и rep () - PullRequest
0 голосов
/ 16 апреля 2019

Я создал вектор x, который содержит последовательность от 0 до 1, где каждое значение повторяется 100 раз.Когда я отображаю вектор, он выглядит просто отлично.Однако индексирование не работает для всех уникальных значений x.

x.seq <- seq(from = 0, to = 1, by = 0.01)
x <- rep(x.seq, each = 100)

x
x == 0.7
x == 0.70

x показывает ожидаемый результат, однако x == 0.70 показывает только FALSE.Я очень смущен, поскольку это не так для каждого значения.Например, пытаясь x == 0.99, я получаю ожидаемые результаты с 100 TRUE.

Поразительно, когда я пробовал обходной путь через unique(), индексация снова работает:

unique(x)[71]     # as a workaround for x = 0.7
x == unique(x)[71]

Есть идеи?

1 Ответ

0 голосов
/ 16 апреля 2019

С help("==")

Для числовых и комплексных значений помните, что == и != не допускают конечного представления дробей и ошибки округления ,Использование all.equal с одинаковым почти всегда предпочтительнее.Смотрите примеры.(Это также относится и к другим операторам сравнения.)

Мы столкнулись с численной проблемой.

x.seq[71] - 0.7
# [1] 1.110223e-16

Посмотрев на источник seq.default, 71-йзначение seq(from = 0, to = 1, by = 0.01) равно 0 + 70 * 0.01, а 70 * 0.01 == 0.7 действительно FALSE на моей машине.

...