Производит вывод
ый вариант использования в 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, а затем используется в качестве параметра в другой функции, которая работает с каждым наблюдением?