Быстрое ограничение данных в R

Предположим, у меня есть вектор vecдлинной (, начинающийся с 1E8 элементов. )и хотел бы ограничить его диапазоном [a,b]. Я, конечно, могу закодировать vec[vec < a] = aи vec[vec > b] = b, но это требует двух проходов по данным и большого выделения ОЗУ для вектора временного индикатора (~800 МБ, дважды ). Два прохода сжигают время, потому что мы можем добиться большего успеха, если будем копировать данные из основной памяти в локальный кеш только после того, как (обращения к основной памяти будут неверными, как и промахи кеша ). И кто знает, насколько это можно улучшить с помощью нескольких потоков, но не будем жадничать.:)

Есть ли хорошая реализация в базе R или каком-то пакете, который я упускаю из виду, или это работа для Rcpp (или моего старого друга data.table)?

14
задан Iterator 6 May 2012 в 22:17
поделиться