Есть ли функция в R, которая эффективно проверяет, превышает ли значение больше одного и меньше другого? Он также должен работать с векторами.
По сути, я ищу более быструю версию следующей функции:
> in.interval <- function(x, lo, hi) (x > lo & x < hi)
> in.interval(c(2,4,6), 3, 5)
[1] FALSE TRUE FALSE
Проблема заключается в том, что x
нужно коснуться дважды, а вычисление потребляет вдвое больше памяти по сравнению с более эффективным подходом. Внутри я бы предположил, что он работает следующим образом:
- Вычислить
tmp1 <- (x > lo)
- Вычислить
tmp2 <- (x < hi)
- Вычислить
retval <- tmp1 & tmp2
Теперь, после шага 2, два булевых вектора находятся в памяти, а x
нужно было посмотреть дважды. Мой вопрос: есть ли (встроенная?) Функция, которая делает все это за один шаг, не выделяя лишнюю память?
Следуйте этому вопросу: R: выберите значения из таблицы данных в диапазоне
EDIT: я настроил Gist на основе ответа CauchyDistributedRV на https://gist.github.com/4344844