Типичным случаем использования в R (по крайней мере для меня) является идентификация наблюдений в фрейме данных, которые имеют некоторую характеристику, которая зависит от значений в некотором подмножестве других наблюдений.
Чтобы сделать это более конкретным, предположим, что у меня есть ряд работников (проиндексированных WorkerId), которые
есть связанная «Итерация»:
raw <- data.frame(WorkerId=c(1,1,1,1,2,2,2,2,3,3,3,3),
Iteration = c(1,2,3,4,1,2,3,4,1,2,3,4))
и я хочу в конечном итоге установить поднабор фрейма данных, чтобы исключить «последнюю» итерацию (путем создания логического «удаления») для каждого работника. Я могу написать функцию для этого:
raw$remove <- mapply(function(wid,iter){
iter==max(raw$Iteration[raw$WorkerId==wid])},
raw$WorkerId, raw$Iteration)
> raw$remove
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
но это становится очень медленным, так как фрейм данных становится больше (вероятно, потому что я без необходимости вычисляю максимум для каждого наблюдения)
Мой вопрос заключается в том, что является более эффективным (и идиоматическим) способом сделать это в стиле функционального программирования. Сначала создается словарь значений WorkerId to Max, а затем используется в качестве параметра в другой функции, которая работает с каждым наблюдением?