Применение над вектором функций

Для вектора (фактически списка) функций:

 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