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