Применение над вектором функций
Для вектора (фактически списка) функций:
fs = c(sin, cos, tan)
и вектор значений:
xs = c(.1, .3, .5)
Существует ли лучший/аккуратный/более быстрый/более сильный способ вычисления fs[[i]](xs[i])
для каждого векторного элемента:
vapply(1:3, FUN.VALUE = 1 ,function(i){fs[[i]](xs[i])})
[1] 0.09983342 0.95533649 0.54630249
Или я пропускаю функцию fapply
где-нибудь? Функции всегда будут функциями одного скалярного значения и возвращают одно скалярное значение.
Ответы
Ответ 1
Приятный и простой:
mapply(function(fun, x) fun(x), fs, xs)
Но я согласен с @flodel. Я также искал базовую функцию для function(fun, ...) fun(...)
и был удивлен, что, похоже, нет. С другой стороны, я никогда не нуждался в этом, пока.
Ответ 2
Здесь альтернатива, основным преимуществом которой является то, что она не требует определения анонимной функции.
mapply(do.call, fs, lapply(xs, list))
# [1] 0.09983342 0.95533649 0.54630249